Javascript 为什么';这个正则表达式不适用于循环对吗?

Javascript 为什么';这个正则表达式不适用于循环对吗?,javascript,regex,Javascript,Regex,正则表达式试图只匹配术语,而不是两个标记之间的术语。标记总是相等地配对 运行此: test(?=(?:[^<]*<[^>]*>)*[^<]*$) wehtestouiewgt<test>aiosuuotestasdhjp<ottesther>asofatestsofg<trash>sjd test(?=(?:[^)*[^在前瞻中相等?您不想在前瞻中匹配对;您可能只想在之后不进行测试,除非首先出现一个。(您不能反向执行相同操作;J

正则表达式试图只匹配术语,而不是两个标记之间的术语。标记总是相等地配对

运行此:

test(?=(?:[^<]*<[^>]*>)*[^<]*$)
wehtestouiewgt<test>aiosuuotestasdhjp<ottesther>asofatestsofg<trash>sjd

test(?=(?:[^)*[^在前瞻中相等?

您不想在前瞻中匹配
对;您可能只想在
之后不进行
测试,除非
首先出现一个
。(您不能反向执行相同操作;JavaScript正则表达式引擎不支持可变长度查找。)/p
预检测(?=[^>]*(?:您的先行零宽度断言表达式使用

[^<]*

将匹配
test
,因为
test
后面紧跟着
(与“除
之外的任何内容”匹配,我甚至在stackoverflow上破坏了标记解析器,因为它似乎没有将我加粗的文本的90%加粗。这就是我今天所遇到的情况!我可以补充一下非常类似的正则表达式test=(?:[^”]*“[^”]*”*”[^”]*”[^”]*)非常适合查找不在引用中的术语。(当然,如果测试用例发生了更改)谢谢,这是可行的!但是你能解释一下为什么匹配对失败吗?匹配对不是正确的方法;你需要确保
test
不在一对内。因此,你需要确保
test
后面没有错误的“半对”。出于好奇,如果标记是一个序列,这是可能的吗?就像单词一样例如“开始”和“结束”,或者类似的东西?是的:
test(?=(?:(?!end)。*start |(?:(?!start | end)。*$)
我刚刚写了和我检查注释时一样的东西,但它很有效。谢谢!你指的是这一权利的最后一次出现吗?我想(?:[^)*将尽可能匹配。@Nowayz:例如,是的,但是对于
,同样的问题也会出现:它仍然会匹配
test
,因为第一个
[^
。请注意,在默认情况下,regexp量词尽可能匹配,而剩余的仍然允许匹配(即,也可以匹配小于该量词的最大值)。贪婪/非贪婪从不影响正则表达式是否匹配,而只影响特定组中的结果。
[^<]*
<test>