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 获取括号内的字符串