2010-09-09 50 views
1

我在javascrip中有一个小的模板系统,用户可以在这个表格中放置标签$ tagname $。我可以将所有标签与模式匹配:/\ $ \ w + \ $/

另外,我想特别不完全匹配标签(它将开始与$,并用一个单词边界,是不是$完成)。我不能使用/\ $ \ w + \ b/,因为$也是一个字边界(所以它也会匹配正确的标签)。我尝试过,但它不起作用:/\ $ \ w + [^ \ $]/

它在这串“字$标签任何词”不完全标签匹配,但它也能够匹配这个“字$标签$任何词”。

正常表达的正确结局是什么?

+0

当我读到“..incomplete tags”时,我感到一种冲动的冲动,引用bobince的“如何(不)用正则表达式解析html”的回复:D – jrharshath 2010-09-09 22:38:10

+0

哈哈我记得当我发布这个问题时 – Nachocual 2010-09-10 15:56:12

回答

2

如果你想专门匹配不完整的标签,你可以使用负前瞻:

\$\w+(?![$\w]) 

但它可能是更有效地使用托默勒格的正则表达式和单独做检查,看其是否与$结束。或捕捉(可选)结束$这样的:

\$\w+\b(\$?) 

如果#1组包含一个空字符串,这是一个不完整的标签。

+0

我还不够清楚,我想特别匹配不完整的标签,所以这个技巧。 – Nachocual 2010-09-10 15:58:40

2
\$\w+\b\$? 

你试试\$\w+[^\$]没有因为[^\$]必须匹配的东西,而\$?比赛可选工作。那么,因为你没有定义字边界的位置。

此外,在字符类中转义$不是必须的,这是同样的事情:[^$]

0

因此,如果$被视为字边界,为什么不只是这样做:\$\w+\b?否则,只要使用\$\w+[\$\b],我想,即使这是多余的。

+2

' \ $ \ w + [\ $ \ b]'不起作用;在字符类中,'\ b'匹配退格,而不是字边界。 – 2010-09-10 01:56:08

相关问题