【问题标题】:JavaScript or jQuery string ends with utility functionJavaScript 或 jQuery 字符串以实用函数结尾
【发布时间】:2023-03-12 20:14:02
【问题描述】:

判断一个字符串是否以某个值结尾的最简单方法是什么?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

从prototypejs偷来的:

String.prototype.endsWith = function(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.lastIndexOf(pattern) === d;
};

'slaughter'.endsWith('laughter');
// -> true

【讨论】:

  • 有些人认为修改核心类的原型是不应该做的事情——Crockford 在他的《JavaScript: The Good Parts》一书中将其称为“全局消除”。
  • 你为什么不这样做呢?或者你只是因为 Crockford 说过才不这样做?
  • 你不应该这样做,因为它不能保证在所有 JS 实现中都能工作:ECMAScript Compact Profile 规范(ECMA-327:ecma-international.org/publications/standards/Ecma-327.htm)指定“紧凑”实现(例如手机等手持设备上)不需要支持它(参见第 5.2 节)。即使您对此不感兴趣,它也很有可能会破坏较新版本的 JS:例如,过去部署了向 Array.prototype 添加“forEach”方法的代码的任何人现在都破坏了本机实现在最新版本的 Firefox 中。
  • 如果有人不想修改字符串,他们可以很容易地把它变成一个独立的函数。
【解决方案2】:

你可以像这样使用正则表达式:

str.match(/value$/)

如果字符串末尾有“值”($),则返回 true。

【讨论】:

  • 测试失败:value="test[a-z]"。否则:'test[a-z]'.match(/[a-z]$/) 返回 "null"
  • 我通常不会先从包里拿出正则表达式工具,但这胜过所有的替代方案(String#endsWith 仅在 Firefox 中原生支持,扩展/使用 3rd 方 js 有点矫枉过正)
  • match() 不返回布尔值。 'foobar'.match(/bar$/) 返回 ["bar"]
  • 如果我们只想要一个布尔结果,RegEx Search() 而不是 Match() 将是一个更好的选择。如果没有找到,Search() 将返回 -1。 if(str.search(/value$/) != -1) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
【解决方案3】:

正则表达式

"Hello world".match(/world$/)

【讨论】:

    【解决方案4】:

    你总是可以原型 String 类,这会起作用:

    String.prototype.endsWith = function(str) {return (this.match(str+"$")==str)}

    您可以在http://www.tek-tips.com/faqs.cfm?fid=6620中找到String类的其他相关扩展

    【讨论】:

    • 如果 str 包含特殊的正则表达式字符,例如“[ssss]”,这将失败。
    • 这也失败了,因为match 返回了一个数组。它必须是 this.match(str+"$")[0]===str(如果 match 没有找到任何东西,这可能会失败 - 实际上并没有对这个进行错误测试)。
    【解决方案5】:

    我只是在扩展 @luca-matteis 发布的内容,但为了解决 cmets 中指出的问题,应包装代码以确保您不会覆盖本机实现。

    if ( !String.prototype.endsWith ) {  
        String.prototype.endsWith = function(pattern) {
            var d = this.length - pattern.length;
            return d >= 0 && this.lastIndexOf(pattern) === d;
        };
    }
    

    这是the mozilla developer network中指出的Array.prototype.forEach方法的建议方法

    【讨论】:

      【解决方案6】:

      我对匹配方法没有运气,但这很有效:

      如果你有字符串,“这是我的字符串。”并想看看它是否以句号结尾,请执行以下操作:

      var myString = "This is my string.";
      var stringCheck = ".";
      var foundIt = (myString.lastIndexOf(stringCheck) === myString.length - stringCheck.length) > 0;
      alert(foundIt);
      

      您可以将变量 stringCheck 更改为要检查的任何字符串。更好的办法是把它扔到你自己的函数中,如下所示:

      function DoesStringEndWith(myString, stringCheck)
      {
          var foundIt = (myString.lastIndexOf(stringCheck) === myString.length - stringCheck.length) > 0;
          return foundIt;
      }
      

      【讨论】:

      • 真的很好,@theJerm。这在各种情况下都对我有用,而 .match 并非总是如此。
      【解决方案7】:

      ES6 直接支持这个:

      'this is dog'.endsWith('dog')  //true
      

      【讨论】:

      • 一旦没有人使用 IE11 或更低版本,这将很有用。
      • 是的,但是你有 babel。
      【解决方案8】:

      你可以'hello world'.slice(-5)==='world'。适用于所有浏览器。比正则表达式快得多。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        • 2021-11-25
        • 1970-01-01
        • 2010-10-03
        相关资源
        最近更新 更多