为什么这个正则表达式不适用于重复对?

时间:2013-11-18 06:49:07

标签: javascript regex

正则表达式试图仅匹配两个标记之间的术语。标记总是同等配对。

运行此:

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

应匹配:

weh*test*ouiewgt<test>aiosuuo*test*asdhjp<ottesther>asofa*test*sofg<trash>sjd

但出于某种原因它匹配:

weh*test*ouiewgt<*test*>aiosuuo*test*asdhjp<ot*test*her>asofa*test*sofg<trash>sjd

为什么在匹配时会发生这种情况? &GT;同样在前瞻中?

2 个答案:

答案 0 :(得分:1)

您不希望在前瞻中匹配<>对;您可能只是希望>跟在test之后,除非先出现<。 (你不能反向执行; JavaScript正则表达式引擎不支持可变长度的lookbehind。)

test(?=[^>]*(?:<|$))

答案 1 :(得分:1)

你的先行零宽度断言表达式使用

[^<]*

,这意味着“除<之外的任何字符”,但包括>。例如,

<test>

将与test匹配,因为test后跟>(匹配“<以外的任何内容”),然后字符串结束。