Javascript - 只获取正则表达式匹配的可变部分

mor*_*des 8 javascript regex

给定:

var regexp = new RegExp("<~~include(.*?)~~>", "g");
Run Code Online (Sandbox Code Playgroud)

在javascript中,将变量分配给匹配的任何内容的简单方法是什么?*?

我可以做到这一点,但它有点难看:

myString.match(regexp).replace("<~~include", "").replace("~~>", "");
Run Code Online (Sandbox Code Playgroud)

eld*_*his 7

Javascript应该在正则表达式匹配上返回一个数组对象,其中数组的零索引是匹配的整个字符串,以下索引是捕获组.在你的情况下像:

var myVar = regexp.exec(myString)[1];

应该将(.*?)捕获组的值分配给myVar.

  • 如果没有匹配项,这不会抛出错误吗?如果没有匹配项,它将返回null,因此尝试访问null对象的数组索引将引发错误。 (2认同)

Mat*_*all 6

(来自MDC的报价)

在正则表达式模式中包括括号会导致记住相应的子匹配.例如,/a(b)c/匹配字符'abc'并记住'b'.

由于.*?是第一个(也是唯一一个)记住的匹配,因此请$1在替换字符串中使用:

var foo = myString.replace(regexp, '$1');
Run Code Online (Sandbox Code Playgroud)

编辑:根据您的评论,您也可以(可能有更明确的意图)这样做:

var foo = regexp.exec(myString)[1];
Run Code Online (Sandbox Code Playgroud)