Javascript RegExp无法按预期工作在参数内捕获字符串

Javascript RegExp无法按预期工作在参数内捕获字符串,javascript,regex,Javascript,Regex,我正在处理一个问题,其中我得到一个字符串,其中有几组括号 例如:(024025026027028),(029030031032033) 当我得到字符串时,我有一个变量,它包含一个字符串,比如“030”。我创建一个正则表达式,如下所示: var re=new RegExp(“.*?\”((.*?+id+”*?)\)*) 并按以下步骤进行更换: string.replace(re,“$1”) 所以问题是,如果数字落在第一组括号内,那么它将正常工作,但如果它落在第二组括号内,则不会正常工作 因此: 返

我正在处理一个问题,其中我得到一个字符串,其中有几组括号

例如:(024025026027028),(029030031032033)

当我得到字符串时,我有一个变量,它包含一个字符串,比如“030”。我创建一个正则表达式,如下所示:

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"