JavaScript或jQuery字符串以实用程序功能结尾


Answers:


153

您可以使用Regexps,如下所示:

str.match(/value$/)

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


1
测试失败:value =“ test [az]”。否则:'test [az]'。match(/ [az] $ /)返回“空”
gmunkhbaatarmn 2012年

我通常不会首先从包中拿出正则表达式工具,但是这击败了所有其他选择(仅在firefox中本地支持String#endsWith,并且扩展/使用3rd party js有点
矫kill过正

1
match()不返回布尔值。'foobar'.match(/ bar $ /)返回[“ bar”]
Jonathan.Brink

1
如果我们只想要布尔结果,则RegEx Search()而不是Match()将是一个更好的选择。如果找不到,Search()将返回-1。if(str.search(/ value $ /)!= -1)developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/…–
mitaka

39

从prototypejs被盗:

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

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

5
有人认为修改核心类的原型是您不应该做的事情-Crockford在他的书JavaScript:The Good Parts中将其称为“全球减排”。
Walter Rumsby

4
你为什么不这样做呢?还是您只是因为克罗克福德所说而不这样做?
卡·马太斯

11
您不应该这样做,因为不能保证它可以在JS的所有实现中都能正常工作:ECMAScript紧凑规范规范(ECMA-327:ecma-international.org/publications/standards/Ecma-327.htm)指定“紧凑的实现(例如在诸如电话之类的手持设备上)不需要支持它(请参阅第5.2节)。即使您不为此而烦恼,它也很有可能会破坏JS的较新版本:例如,任何以前部署过向Array.prototype添加“ forEach”方法的代码的人现在都在破坏本机实现。在最新版本的Firefox中。
NickFitz

3
如果有人不想修改String,他们可以很容易地将其变成独立的函数。
studgeek 2011年


5

我对比赛的方法不走运,但这行得通:

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

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;
}

1
真的很好,@ theJerm。这在多种情况下对我有用,而.match并非总是如此。
弥敦道

5

你可以做的'hello world'.slice(-5)==='world'。在所有浏览器中均可使用。比正则表达式快得多。



1

我只是在扩展@ luca-matteis的内容,但是要解决注释中指出的问题,应将代码包装起来以确保您不会覆盖本机实现。

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

这是mozilla开发人员网络中指出的Array.prototype.forEach方法的建议方法


0

您可以始终原型String类,这将起作用:

String.prototype.endsWith = function(str){返回(this.match(str +“ $”)== str)}

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


2
如果str包含特殊的正则表达式字符,例如“ [ssss]”,则此操作将失败。
studgeek 2011年

这也因为match返回数组而失败。它必须是this.match(str+"$")[0]===str(如果match找不到任何东西,可能会失败-实际上没有对它进行错误测试)。
TLS
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.