正则表达式单词边界不识别标点符号

时间:2013-12-01 06:44:38

标签: regex word-boundary

我有一个特别的正则表达式:

#\b[a-z0-9-_%"]+\b#gi

我将以下测试字符串应用于该正则表达式过滤器:

abc def ghi jkl mno %%car% __car_ tall-person "thing" 20% %30%

但是,检测到的字边界如下(方括号代表边界):

[abc] [def] [ghi] [jkl] [mno] %%[car%] [__car_] [tall-person] "[thing"] [20%] %[30%]

因此,某些类型的标点符号(“_”)在单词的开头和结尾都被识别为“单词字符”。另一方面,当它们位于单词的开头时,忽略其他类型(“%”或双引号)。这是为什么?

1 个答案:

答案 0 :(得分:3)

在单词边界中,单词表示\w元字符(在大多数正则表达式引擎中):[A-Za-z0-9_]; %"不在该字符中:匹配字边界。

我认为你不需要使用单词边界:

// javascript example
> 'abc def ghi jkl mno %%car% __car_ tall-person "thing" 20% %30%'.match(/[a-z0-9-_%"]+/g)
["abc", "def", "ghi", "jkl", "mno", "%%car%", "__car_", "tall-person", ""thing"", "20%", "%30%"]