在Javascript中排除连字符的单词边界

时间:2014-07-25 22:06:47

标签: javascript regex

我喜欢\b字边界分隔符,但在我看来,-不是字分隔符。它应该是这个词的一部分。

# in node
> 'peter bengtsson o-peter'.replace(/\b(pete|be)/gi, 'X')
'Xr Xngtsson o-Xr'

我希望输出为Xr Xngtsson o-peter

我怎样才能做出类似这样的事情,但让-成为这个词的一部分,而不是边界?

2 个答案:

答案 0 :(得分:3)

使用Capture Group的DIY边界

使用捕获组定义自定义分隔符。在这种情况下,我们的分隔符是字符串^的开头或空格字符。

replaced = yourString.replace(/(^| )(?:pete|be)/gi, "$1X");

在替换中,$1插入由第1组括号捕获的内容,即如果我们匹配字符串的开头,则为空字符串,或空格字符。

输出:

Xr Xngtsson o-peter

选项2

正如@jongware建议的那样,我的正则表达式可以调整为:

(^|[^-\w])(?:pete|be)

在交替的右侧,我们不是像原始字符那样匹配空格字符,而是匹配不是连字符或字符的字符,这更接近于“扩展{{1}的意图” “边界”在各种情况下。您仍然需要在替换中使用第1组:

\b

答案 1 :(得分:1)

您始终可以使用解决方法:

var r = 'peter bengtsson o-peter'.replace(/(-)?\b(?:pete|be)/gi, function($0, $1) {
    return $1 ? $0 : 'X';
});
console.log(r) //=> "Xr Xngtsson o-peter"