Javascript RegExp无法按预期工作在参数内捕获字符串
我正在处理一个问题,其中我得到一个字符串,其中有几组括号 例如:(024025026027028),(029030031032033) 当我得到字符串时,我有一个变量,它包含一个字符串,比如“030”。我创建一个正则表达式,如下所示:Javascript RegExp无法按预期工作在参数内捕获字符串,javascript,regex,Javascript,Regex,我正在处理一个问题,其中我得到一个字符串,其中有几组括号 例如:(024025026027028),(029030031032033) 当我得到字符串时,我有一个变量,它包含一个字符串,比如“030”。我创建一个正则表达式,如下所示: var re=new RegExp(“.*?\”((.*?+id+”*?)\)*) 并按以下步骤进行更换: string.replace(re,“$1”) 所以问题是,如果数字落在第一组括号内,那么它将正常工作,但如果它落在第二组括号内,则不会正常工作 因此: 返
var re=new RegExp(“.*?\”((.*?+id+”*?)\)*)代码>
并按以下步骤进行更换:
string.replace(re,“$1”)代码>
所以问题是,如果数字落在第一组括号内,那么它将正常工作,但如果它落在第二组括号内,则不会正常工作
因此:
返回“024025026027028”
但是:
返回:“024025026027028)、(029030031032033”
我正在指定?
,以尽量减少在参数之间捕获的内容-但它似乎不起作用。有人能解释一下我遗漏了什么吗
这是一个JSFiddle
当您想从字符串中提取数据时,这通常是一个好主意
- 避免模糊、笼统或否定的模式
- 使用
match
代替replace
它更干净、更明确、更快
在这里,您应该使用(\d+,)*
和(,\d+*
而不仅仅是*?
var id=“029”;
var re=new RegExp(“\\((\\d+,)*”+id+“(,\\d+*)\”)”;
变量字符串=“(024025026027028),(029030031032033)”;
document.writeln(string.match(re)[1]);
不要在正则表达式中使用*?
,而是使用否定模式:
var id = "029";
var re = new RegExp("\\(([^)]*" + id + "[^)]*)\\)");
var string = "(024,025,026,027,028),(029,030,031,032,033)";
string.replace(re, "$1");
//=> "(024,025,026,027,028),029,030,031,032,033"
([^)]*
将匹配任何非)
字符中的0个或多个字符,从而在匹配结果为)
时停止匹配
- 然而,当您有
*?
时,它将匹配,直到它找到id
变量,该变量存在于第二组(…)
中
将*?
替换为[^()]*
var id = "029";
var re = new RegExp(".*?\\((.*?" + id + ".*?)\\).*");
var string = "(024,025,026,027,028),(029,030,031,032,033)";
document.writeln(string.replace(re, "$1"));
var id = "029";
var re = new RegExp("\\(([^)]*" + id + "[^)]*)\\)");
var string = "(024,025,026,027,028),(029,030,031,032,033)";
string.replace(re, "$1");
//=> "(024,025,026,027,028),029,030,031,032,033"