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

标签 javascript regex

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

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

我希望输出是 Xr Xngtsson o-peter

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

最佳答案

使用捕获组DIY边界

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

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

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

输出:

Xr Xngtsson o-peter

选项 2

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

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

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

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

关于javascript - Javascript 中不包括连字符的单词边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24965209/

相关文章:

regex - 捕获两个大括号之间的所有数据

javascript - 使用 jQuery 使 future 的列表项可排序

javascript - jwplayer 中播放列表项目的偏移量

javascript - 我可以根据路由的模式将中间件应用于路由吗?

值两侧测量单位的正则表达式 (200 g/g 200)

regex - 如何将正则表达式转换为不支持反向引用的 golang 正则表达式风格?

javascript - 通过 onclick 事件调用 JavaScript 函数(带参数)

javascript - 更改页面背景。本地存储

regex - 在 Linux 终端中使用带有 egrep 的正则表达式查找数字

Python - 正则表达式 - 匹配除以下内容之外的任何内容