用于匹配以#开头的全字的正则表达式(Javascript)

时间:2010-09-27 19:37:58

标签: regex

我想匹配一个以#character开头的单词。

enter #code here - #code
some#string here - nothing
#test - #test

我提出了以下正则表达式:

   "enter #code here".replace(/\b#[\w]*/gi, "REPLACED") 

但它不起作用。经过一些测试后我发现了

   "enter #code here".replace(/#\b[\w]*/gi, "REPLACED") 

工作正常。

现在有人可以解释为什么\ b#part在这种情况下不正确吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

\b是非单词字符和单词字符之间的过渡,反之亦然。由于'#'不是单词字符,因此您的第一个表达式只匹配在#之前直接包含单词字符的字符串。

可能有效的是表达式/(\W)#[\w]*/gi,因为你的第二个例子将匹配这三个字符串中的任何一个。使用反向引用将匹配表达式中的非单词字符放入替换表单中。

答案 1 :(得分:1)

#[\w]之间的变化是字词边界的非单词过渡,因此\b与之匹配,但#的空格不是边界过渡。

你的“工作正常”正则表达式错误地替换了some#string here中的“#string”,你说它不应该:"some#string here".replace(/#\b[\w]*/gi, "REPLACED");给了我"someREPLACED here"

我认为你想要的是空白与非白色的'尖锐'(你不需要\w左右的括号)所以我想出的正则表达式是

>>> "enter #code here".replace(/(\W)#\w*/gi, "$1REPLACED");
"enter REPLACED here"
>>> "some#string here".replace(/(\W)#\w*/gi, "$1REPLACED");
"some#string here"