Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-贪婪正则表达式问题_Javascript_Regex - Fatal编程技术网

Javascript-贪婪正则表达式问题

Javascript-贪婪正则表达式问题,javascript,regex,Javascript,Regex,我的正则表达式必须与/*@DT-HIDE/和/@/DT-HIDE*/中的内容匹配。在一个页面包含两个块之前,一切正常 如果有两个区块,那么$1将匹配第一个开口@DT-HIDE和最后一个@DT-HIDE之间的所有区块。 我想是关于一个贪婪的人,而不是一个贪婪的人?但我想不出来 正则表达式: const pattern = new RegExp(/(\/\*\s@DT-HIDE\s\*\/) ([\s\S]*?) (\/\*\s@\/DT-HIDE\s\*\/)/g); 正在处理的示例值: /*

我的正则表达式必须与/*@DT-HIDE/和/@/DT-HIDE*/中的内容匹配。在一个页面包含两个块之前,一切正常

如果有两个区块,那么$1将匹配第一个开口@DT-HIDE和最后一个@DT-HIDE之间的所有区块。 我想是关于一个贪婪的人,而不是一个贪婪的人?但我想不出来

正则表达式:

const pattern = new RegExp(/(\/\*\s@DT-HIDE\s\*\/) ([\s\S]*?) (\/\*\s@\/DT-HIDE\s\*\/)/g);
正在处理的示例值:

/* @DT-HIDE */
function(){
    return "...";
}
/* @/DT-HIDE */

/* @DT-HIDE */
function logic(url){
    return new Promise( (resolve, reject) => {
        ...
    });
}
/* @/DT-HIDE */

您应该在原始模式中使用
[\s\s]*
,否则将无法获得“贪婪”匹配

但是,正如Slim所注意到的,您引入的空格未能匹配,因为
/*@DT-HIDE*/
之后没有空格。因此,可以通过删除空格来解决此问题。当模式包含许多斜杠时,使用conbstructor表示法声明模式是一个好主意,但在这种情况下,您可以使用不带RegExp构造函数的regex文本:

const pattern = /(\/\*\s@DT-HIDE\s\*\/)([\s\S]*?)(\/\*\s@\/DT-HIDE\s\*\/)/g;
然而,该模式不是最优的,因为惰性点匹配模式可能涉及许多“前向跟踪”步骤。我建议这样做


[^\/]*(?:\/(?!\*\s@/DT-HIDE\s\*/)[^\/]*)*
将使匹配更加有效,尤其是当分隔符之间的
/
数量不太大时。

因为您使用的是
新RegExp()
构造函数,遗憾的是,您没有传递字符串而不是
/…/
构造:这样可以避免在regexp中转义斜杠。相反,你需要避开双引号,这在你的情况下不会是一个问题。好吧,这已经是一个很好的信息-谢谢!哈。。正如我所看到的,唯一的问题是组之间(括号之间)有两个空格:
/(\/\*\s@DT-隐藏\s\*\/)([\s\s]*?)(\/\*\s@/DT-HIDE\s\*\/)/g
。您也不需要构造函数,只需将正则表达式分配给
模式
variable@Aaron:双引号(或单引号),但也包括所有反斜杠。@CasimiretHippolyte正确,尽管它们已经需要在
/…/
构造中转义
const pattern = /(\/\*\s@DT-HIDE\s\*\/)([^\/]*(?:\/(?!\*\s@\/DT-HIDE\s\*\/)[^\/]*)*)(\/\*\s@\/DT-HIDE\s\*\/)/g;
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^