regex 在消耗后在匹配中匹配[duplicate]

brjng4g3  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(151)

此问题在此处已有答案

RegEx match open tags except XHTML self-contained tags(34个答案)
5天前关闭。
我有一个正则表达式:

/<([\w-_]+)[^>]+if="([\w_]+)">.*?<\/\1>/g

并且它应该与类似XML的标记相匹配:

console.log('<hi if="bruh"> stuff in between <other if="yes"> </other></hi>'.match(/<([\w-_]+)[^>]+if="([\w_]+)">.*?<\/\1>/g));

这显然会返回整个原始字符串作为匹配。问题是,XML可以嵌套,而且我更希望正则表达式匹配一次完成,因为性能要求和需要匹配的字符串很大。在这种情况下,我还希望<other if="yes"> </other>作为匹配。这对正则表达式(至少在Javascript中)是可能的吗?如果是,怎么做?
我也很好奇用嵌套替换html标签中的文本的最快方法,以及是否有一种方法可以使这个正则表达式更快。
目前唯一的解决方案是多次传递,或者可能是一种定制的解析器,但是执行起来需要很多时间,我真的希望能够避免这种情况。

g6ll5ycj

g6ll5ycj1#

它比.match()快得多,因为.match()返回数组

let str = "bla bla bla <hi if=\"bruh\"> stuff in between <other if=\"yes\"> </other></hi> bla bla bla";
let regExp = /<([\w-_]+)[^>]+if="([\w_]+)">.*?<\/\1>/gms;

if (regExp.test(str)) str = str.replace(regExp, "");

console.log(str);

相关问题