正则表达式匹配完整的单词,从第(JavaScript)的
问题描述:
我想配一个单独的词与#字符开始。正则表达式匹配完整的单词,从第(JavaScript)的
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#部分是在这种情况下,不正确的?
谢谢!
答
\b
是一个非文字字符和单词字符,或反之亦然之间的转变。由于'#'
是不发一言的性格,你的第一个表达式将只匹配具有#
之前直接单词字符的字符串。
什么可能的工作是表达/(\W)#[\w]*/gi
,因为你的第二个例子将匹配任何这三个串。使用反向引用将匹配表达式中的非单词字符放入替换中。
答
的#
和[\w]
之间的变化是一个无字过渡到字边界,所以\b
匹配,但#
空间不是边界变迁。
你“的作品就好了”正则表达式替换不正确的“#string”在some#string here
,你说这不应该:"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"
+0
谢谢您的解释,我错误地理解了\ b字符。 – 2010-09-27 20:07:22
谢谢你的解释。 – 2010-09-27 20:06:16
如果你的引擎支持它(JavaScript不),你可以使用[回顾后(http://www.regular-expressions.info/lookaround.html),而不是捕获组不捕捉'\ W' :'/(? 2010-09-27 20:18:30