Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript中不包括连字符的单词边界_Javascript_Regex - Fatal编程技术网

Javascript中不包括连字符的单词边界

Javascript中不包括连字符的单词边界,javascript,regex,Javascript,Regex,我喜欢\b单词边界分隔符,但在我看来,-不是单词分隔符。它应该是这个词的一部分 # in node > 'peter bengtsson o-peter'.replace(/\b(pete|be)/gi, 'X') 'Xr Xngtsson o-Xr' 我希望输出为Xr Xngtsson o-peter 我怎样才能做一些几乎像这样的事情,但使-成为单词的一部分而不是一个边界?使用Capture Group DIY边界 使用捕获组定义自定义分隔符。在本例中,分隔符是字符串^的开头或空格字符

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

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

我怎样才能做一些几乎像这样的事情,但使
-
成为单词的一部分而不是一个边界?

使用Capture Group DIY边界 使用捕获组定义自定义分隔符。在本例中,分隔符是字符串
^
的开头或空格字符

replaced = yourString.replace(/(^| )(?:pete|be)/gi, "$1X");
在替换中,
$1
插入第1组括号捕获的内容,即如果匹配字符串开头,则插入空字符串,或者插入空格字符

输出:

Xr Xngtsson o-peter
选项2

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

(^|[^-\w])(?:pete|be)
在替换的右侧,我们没有像原来那样匹配空格字符,而是匹配一个不是连字符或单词字符的字符,这更接近于在各种情况下“扩展
\b
边界”的意图。您仍然需要在替换中使用组1:

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

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

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"

如果JS中只有负面的lookbehind可用,这将是微不足道的
您可以替换空间内的空间,也可以从
[^-\w]
开始,因此它也适用于
peter(“pete”)Peterson
。(未询问,但如果我没有弄错的话,这将与原始的
\b
行为相同。)@Jongware你是对的,这是一个不错的选择。如果你把它贴上去,我会投上一票。不,把它加到你的上面。您的表达式适用于OP,这只是一个小小的改进。@Jongware将其添加为选项2,这要归功于您。感谢您的建议,它丰富了答案。+1用于添加两个选项。希望对OP有帮助