我在javascrip中有一个小模板系统,用户可以在其中放置 $ tagname $ 形式的标签。我可以将所有标签与模式匹配: / \ $ \ w + \ $ / 。
另外,我想要专门匹配不完整的标签(它将以 $ 开头,并以 $ 的字边界结束)。我不能使用 / \ $ \ w + \ b / ,因为$也是一个单词边界(所以它也会匹配正确的标签)。我试过这个,但它不起作用: / \ $ \ w + [^ \ $] / 。
它匹配此字符串中的不完整标记“word $ tag any word”,但它也匹配此“word $ tag $ 任何字词”。
正常表达的正确结局是什么?
答案 0 :(得分:2)
\$\w+\b\$?
您的尝试\$\w+[^\$]
不起作用,因为[^\$]
必须匹配某些内容,而\$?
可选择匹配。好吧,因为你没有定义单词边界的位置。
此外,在字符类中转义$
并非绝对必要,这是同一件事:[^$]
。
答案 1 :(得分:2)
如果您想特定匹配不完整的标签,可以使用否定前瞻:
\$\w+(?![$\w])
但是使用Tomalak的正则表达式并进行单独检查以查看它是否以$
结尾可能更有效。或者捕获(可选)结尾$
,如下所示:
\$\w+\b(\$?)
如果组#1包含空字符串,那么它是一个不完整的标记。
答案 2 :(得分:0)
因此,如果将$视为单词边界,为什么不这样做:\$\w+\b
?否则,我想,只要使用\$\w+[\$\b]
,即使这将是多余的。