我有这个正则表达式:
(。*)|/ \ ==== ====>((* | \ n | \ R)*。?)< ==== \ 1 ==== \ | /克
匹配
等模式|==== Données ====>
byteCode =
{
id : [],
tag : [],
ast : []
};
<==== Données ====|
$ 1表示第一个捕获组,在这个例子中'Données'。
在Firefox中,预期的行为是正确的,但在node.js中,这是一个笑话! 如果你用'exec'调用这个正则表达式,程序进入不确定模式,而不是gc错误,没有超时,没有......但程序永远不会结束......为什么?
如果您希望重现这一点,只需在任何终端中通过此脚本:
const regexp = /\|====(.\*)====>((.\*|\n|\r)*?)<====\1====\|/g;
const text = String.raw
`
|==== Données ====>
byteCode =
{
id : [],
tag : [],
ast : []
};
<==== Données ====|
`;
regexp.exec(text);
感谢您阅读和未来的答案!
答案 0 :(得分:1)
您的代码存在的问题是您在*
中转义了.\*
量词,并将其作为字面星号,而不是量词。
[\s\S]
匹配任何字符,包括换行符:
/\|====([^=]*)====>([\s\S]*?)<====\1====\|/g
其中([^=]*)
匹配除=
以外的0 +以外的字符和[\s\S]*?
匹配0 +任何字符但尽可能少。或者,更好地使用更高效的展开版本:
/\|====([^=]*)====>([^<]*(?:<(?!====\1====\|)[^<]*)*)<====\1====\|/g
请参阅regex demo