RegExp后的JavaScript匹配子字符串
我有一根看起来像RegExp后的JavaScript匹配子字符串,javascript,regex,string,substring,Javascript,Regex,String,Substring,我有一根看起来像 something30-mr200 我想在mr之后得到所有东西(基本上是#后面跟着mr)*总是会有-mr 任何帮助都将不胜感激。如何找到-mr的位置,然后从那里获得子字符串+3 这不是正则表达式,但根据你的描述,它似乎有效 var result = "something30-mr200".split("mr")[1]; 或 为什么不简单地: -mr(\d+) 然后获取捕获组的内容?如何: function getNumber(input) { // rename with
something30-mr200
我想在mr
之后得到所有东西(基本上是#后面跟着mr)*总是会有-mr
任何帮助都将不胜感激。如何找到-mr的位置,然后从那里获得子字符串+3 这不是正则表达式,但根据你的描述,它似乎有效
var result = "something30-mr200".split("mr")[1];
或
为什么不简单地:
-mr(\d+)
然后获取捕获组的内容?如何:
function getNumber(input) { // rename with a meaningful name
var match = input.match(/^.*-mr(\d+)$/);
if (match) { // check if the input string matched the pattern
return match[1]; // get the capturing group
}
}
getNumber("something30-mr200"); // "200"
您可以像Bart给您的那样使用regexp,但我建议使用match而不是replace,因为如果找不到匹配项,则在使用replace时结果是整个字符串,而在使用match时结果为null,这似乎更符合逻辑。(尽管是一般性的) 像这样的东西可以达到目的:
functiong getNumber(string) {
var matches = string.match(/-mr([0-9]+)/);
return matches[1];
}
getNumber("something30-mr200");
这可能适用于您:
// Perform the reg exp test
new RegExp(".*-mr(\d+)").test("something30-mr200");
// result will equal the value of the first subexpression
var result = RegExp.$1;
你忘了关闭字符串
“mr
。哇,几乎相同的解决方案,实际上是在同一时间。干杯:)。你确定要测试匹配[1]
?如果是0
@Gumbo,它将计算为false:它不会计算为false,因为匹配的是字符串而不是数字,它只会在匹配[1]时计算为false是一个空字符串。嘿,如果它是仅在PHP中包含“0”的字符串,那么它的计算结果将为false,因此可能会产生混淆。顺便说一句,这样做很愚蠢。不需要包含第一个*
,连字符也不需要转义。这同样有效:“-mr(.*)“
。但是*
是危险的:如果“-mr”
后面有更多的文本,*
会“吃掉”它。当然,OP并不清楚“-mr”
之后会出现什么文本。这是一个很好的观点。我假设OP会在“-mr”之后想要所有东西。我修改了代码,删除了连字符前的转义,并将子表达式限制为数字。我逃避一切都是出于习惯,而不是其他原因。:)
// Perform the reg exp test
new RegExp(".*-mr(\d+)").test("something30-mr200");
// result will equal the value of the first subexpression
var result = RegExp.$1;