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;