从字符串JS中的最后一个提取子字符串[重复]
Posted
技术标签:
【中文标题】从字符串JS中的最后一个提取子字符串[重复]【英文标题】:Extract sub string from last in a string JS [duplicate] 【发布时间】:2013-07-28 23:15:02 【问题描述】:我需要编写JS函数,如果字符串最后包含- depreciated
,则返回true,否则返回false。
例如:
var somestring = "string value - depreciated";
函数应该在上面的例子中返回 true。
function isDepreciated(var S)
//Need to check for substring in last
//return true or false
一种可能的解决方案是使用search
函数,但这意味着如果- depreciated
出现在字符串中,那么它也会返回true。我真的需要找到天气子字符串是否在最后。
请帮忙。
【问题讨论】:
家庭作业?你试过什么? 了解match
和 RegExp
并尝试一下。
您也可以通过使用substring
来隔离输入的最后 X 个字符并查看它们是否与您要查找的内容匹配。
【参考方案1】:
这里已经有很多答案了(首选带有 $ 的那个),尽管我也必须写一个,所以它也可以完成你的工作,
var somestring = "string value - depreciated";
var pattern="- depreciated";
function isDepreciated(var s)
b=s.substring(s.length-pattern.length,s.length)==pattern;
【讨论】:
【参考方案2】:你可以使用柯里化:http://ejohn.org/blog/partial-functions-in-javascript/
Function.prototype.curry = function()
var fn = this, args = Array.prototype.slice.call(arguments);
return function()
return fn.apply(this, args.concat(
Array.prototype.slice.call(arguments)));
;
;
使用辅助 curry 函数,您可以创建 isDepriated 检查:
String.prototype.isDepricated = String.prototype.match.curry(/- depreciated$/);
"string value - depreciated".isDepricated();
或者使用.bind()
:
var isDepricated = RegExp.prototype.test.bind(/- depreciated$/);
isDepricated("string value - depreciated");
【讨论】:
要解决的问题更具体,所以我不会为此修改字符串原型。 你可能是对的,所以我添加了一个bind
示例;)
我知道你是 JavaScript 活力的***粉丝 ;-) +1 创意方面呵呵【参考方案3】:
好的,我还没有在浏览器上运行此代码,但这应该可以让您大致了解该做什么。如果需要,您可能需要调整一些条件。
var search = "- depricated";
var pos = str.indexOf(search);
if(pos > 0 && pos + search.length == str.length)
return true;
else
return false;
编辑:indexOf()
返回字符串的起始索引。
【讨论】:
pos > 0,这样就应该找到字符串,下一个条件看它是否位于末尾。一种更简洁的方法是使用@Avneesh Raghav 发布的正则表达式。contains
返回布尔值,并非所有浏览器都支持;(
已编辑为 indexOf(),感谢您发现这一点。
为什么if (foo) return true; else return false;
为什么不只返回条件的评估(return foo;
)?挑剔,但似乎相当多余。
由于OP好像是学生,我觉得会比较容易理解。【参考方案4】:
function isDeprecated(str)
return ((str.indexOf("- depreciated") == str.length - "- depreciated".length) ? true : false);
isDeprecated("this")
false
isDeprecated("this - depreciated")
true
isDeprecated("this - depreciated abc")
false
【讨论】:
【参考方案5】:用正则表达式怎么样
var myRe=/depreciated$/;
var myval = "string value - depreciated";
if (myRe.exec(myval))
alert ('found');
else
alert('not found');
【讨论】:
【参考方案6】:function isDepreciated(S)
return (new RegExp(" - depriciated$").test(S));
【讨论】:
【参考方案7】:function isDepreciated(S)
var suffix = "- depreciated";
return S.indexOf(suffix, S.length - suffix.length) !== -1;
【讨论】:
【参考方案8】:您需要结合使用 Javascript 字符串方法 .substr()
和 .length
属性。
function isDepreciated(var id)
var id = "string value - depreciated";
var lastdepreciated = id.substr(id.length - 13); // => "- depreciated"
//return true or false check for true or flase
这将获取从 id.length - 13 开始的字符,并且由于 .substr() 的第二个参数被省略,因此继续到字符串的末尾。
【讨论】:
在 8 以下或等于 8 的 IE 版本中是否支持负索引? @NidaSulheri 是的,你可以...请检查此链接***.com/questions/6918943/…【参考方案9】:在你的 JS 中添加以下代码
function isDepreciated(string)
return /(-depreciated)$/.test(string);
【讨论】:
不需要正则表达式。 另外,可能应该避开-
,尽管它不是必需的。
是的!可能不是,但我发现这是解决此问题的最短且健壮的代码行。
@Jack 为什么没有必要?
@meze 我已将此问题标记为更通用问题的重复;您也可以在那里找到解决方案,或查看 Marginean Vlad 的答案。以上是关于从字符串JS中的最后一个提取子字符串[重复]的主要内容,如果未能解决你的问题,请参考以下文章