JavaScript 或 jQuery 字符串以实用函数结尾

Posted

技术标签:

【中文标题】JavaScript 或 jQuery 字符串以实用函数结尾【英文标题】:JavaScript or jQuery string ends with utility function 【发布时间】:2010-11-08 20:58:53 【问题描述】:

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

【问题讨论】:

另见此问题的第二个答案:***.com/questions/280634/endswith-in-javascript 【参考方案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'。适用于所有浏览器。比正则表达式快得多。

【讨论】:

以上是关于JavaScript 或 jQuery 字符串以实用函数结尾的主要内容,如果未能解决你的问题,请参考以下文章

使用 jquery、javascript 或 PHP 生成查询字符串

如何检查url查询字符串是不是等于javascript(或jquery)[重复]

如何使用 javascript 或 jquery 仅从字符串中获取所有 HTML 标记? [关闭]

使用 jQuery 或 Javascript 获取括号内的字符串

我在使用 Javascript 或 Jquery 创建具有字符串计数的动态字段时遇到问题

Javascript/jQuery 检查字符串是不是包含一个单词或出现的可选单词之一