JS Regexp:\ b用于带连字符的单词

时间:2016-12-08 23:00:17

标签: javascript regex

在JavaScript regexp中,我可以使用什么代替\ b来获得相同的效果,但可以使用连字符

(这个问题针对熟悉\ b和连字符的读者,因此不提供示例。)

更新

Addison&#39; (?<!-)\b(?!-) here是PCRE的部分解决方案。它-500 losing the boundary \b delivers doesn't work不符合{{3}}。它是{{3}}无外观的JavaScript。

2 个答案:

答案 0 :(得分:1)

您无法在JavaScript等不支持lookbehind的正则表达式中创建自己的\b版本。 \b在某个位置匹配。它需要在该位置之前和之后检查字符(或缺少字符)以确定该位置是否应该匹配。这需要前瞻和后瞻。

您可以将带连字符的单词(仅限ASCII)与此正则表达式匹配:

\b[a-zA-Z\-]+\b

此正则表达式允许在单词前后使用连字符,但不包括匹配中的连字符。

答案 1 :(得分:0)

我会考虑使用\b表达式,但修改它会更加挑剔。向其添加一个否定的lookahead and lookbehind,以便它不会出现在爆炸旁边:

(?<!-)\b(?!-)

Try it on Regex 101

请注意,这可能会导致-500等字词出现问题,具体取决于您想要的行为。您可能希望在连字符之前或之后存在边界(或根本不存在)。

更新

正则表达式变得复杂得多,因为在连字符之前通常没有边界,这意味着必须添加一个边界。

(?<!-)\b(?!-)|\B(?=-\w)

第二个条件在存在非单词边界,后跟连字符和单词字符的地方添加边界。这是非常明确的,但这是它发生的唯一情况。