Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于匹配格式为$tagname的不完整标记的正则表达式$_Javascript_Regex - Fatal编程技术网

Javascript 用于匹配格式为$tagname的不完整标记的正则表达式$

Javascript 用于匹配格式为$tagname的不完整标记的正则表达式$,javascript,regex,Javascript,Regex,我在javascrip中有一个小型模板系统,用户可以在其中以$tagname$的形式放置标记。我可以用模式匹配所有标记:/\$\w+\$/ 另外,我还想专门匹配不完整的标记(它将以$开头,以一个不是$的单词边界结束)。我不能使用/\$\w+\b/,因为$也是单词边界(因此它也将匹配正确的标记)。我尝试过这个,但它不起作用:/\$\w+[^\$]/ 它匹配此字符串“word$tag任意单词”中的不完整标记,但也匹配此“word$tag$任意单词” 那个常规表达式的正确结尾是什么 \$\w+\b\$

我在javascrip中有一个小型模板系统,用户可以在其中以$tagname$的形式放置标记。我可以用模式匹配所有标记:/\$\w+\$/

另外,我还想专门匹配不完整的标记(它将以$开头,以一个不是$的单词边界结束)。我不能使用/\$\w+\b/,因为$也是单词边界(因此它也将匹配正确的标记)。我尝试过这个,但它不起作用:/\$\w+[^\$]/

它匹配此字符串“word$tag任意单词”中的不完整标记,但也匹配此“word$tag$任意单词”

那个常规表达式的正确结尾是什么

\$\w+\b\$?
您的try
\$\w+[^\$]
无效,因为
[^\$]
必须匹配某些内容,而
\$?
可以选择匹配。因为你没有定义单词边界的位置

此外,在字符类中转义
$
并不是严格必要的,这是相同的:
[^$]

您的try
\$\w+[^\$]
无效,因为
[^\$]
必须匹配某些内容,而
\$?
可以选择匹配。因为你没有定义单词边界的位置


此外,在字符类中转义
$
并不是严格必要的,这是相同的:
[^$]

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

那么,如果$被视为单词边界,为什么不直接使用:
\$\w+\b
?否则,我想只需使用
\$\w+[\$\b]
,即使这是多余的。

如果您想特别匹配不完整的标记,可以使用负前瞻:

\$\w+(?![$\w])
但是使用Tomalak的正则表达式并单独检查是否以
$
结尾可能更有效。或者像这样捕获(可选)结尾
$

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

如果组#1包含空字符串,则它是不完整的标记。

如果要特别匹配不完整的标记,可以使用负前瞻:

\$\w+(?![$\w])
但是使用Tomalak的正则表达式并单独检查是否以
$
结尾可能更有效。或者像这样捕获(可选)结尾
$

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

如果组#1包含一个空字符串,那么它是一个不完整的标记。

当我读到“.complete tags”时,我冲动地想引用bobince关于“如何(不)用正则表达式解析html”的回答:Dhaha我记得当我读到“.complete tags”时,我把这个问题贴到了博客上。我冲动地想引用bobince关于“.complete tags”的回答“如何(不)用正则表达式解析html”:Dhaha我记得当我发布这个问题时,
\$\w+[\$\b]
不起作用;在字符类中,
\b
匹配的是退格,而不是单词边界。
\$\w+[\$\b]
不起作用;在字符类中,
\b
匹配的是退格,而不是单词边界。我不够清楚,不想专门匹配不完整的标记,所以这样做了。我不够清楚,不想专门匹配不完整的标记,所以这样做了。