javascript - JavaScript 中的单词边界正则表达式

标签 javascript regex

假设我有以下字符串:

bla bla "some" bla bla some bla bla something

我想用“”替换所有出现的“某些”有界非单词符号。我为此编写了一个正则表达式:

/^|[^0-9a-zа-я](some)[^0-9a-zа-я]|$/gi

我如何使用它:

'bla bla "some" bla bla some bla bla something'.replace(/^|[^0-9a-zа-я](some)[^0-9a-zа-я]|$/gi, '<$1>')

其结果是

<>bla bla <some> bla bla<some>bla bla something<>

但我预料

bla bla "<some>" bla bla <some> bla bla something

我该如何修复这个正则表达式?据我所知,JavaScript 的正则表达式不支持命名组。

注意:我无法使用 \b 因为我想要匹配的单词包含西里尔字母符号,并且 Javascript 正则表达式引擎中的 \b 无法与非拉丁语正常工作字母。

最佳答案

你可以使用类似的东西:

yourString.replace(/(^|[^0-9a-zа-я])(some)(?![0-9a-zа-я])/gi, '$1<$2>')

Try it online.

请注意,如 Wiktor Stribiżew对另一个答案的评论,您的 Angular 色类别仅匹配 basic Cyrillic alphabet并且会错过其他西里尔字母字符。另一种方法是停止使用否定字符类,而是匹配您期望作为单词分隔符的字符(如果它们更容易枚举)。从这个 Angular 来看,["\s] 似乎是一个好的开始:

yourString.replace(/(^|[\s"])(some)(?![^\s"])/gi, '$1<$2>')

Try it online.

关于javascript - JavaScript 中的单词边界正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717777/

相关文章:

javascript - 正则表达式 - 匹配字符串中的任何数字

javascript - 在砖石布局中使用ajax加载网页的初始数据

Javascript - 动态嵌套横向

javascript - 下拉菜单在 Internet Explorer 中不起作用

php - 如何匹配正则表达式中的多个单词

javascript - 使用 jquery 在行和列的 Bootstrap 网格中动态添加图像?

Java 正则表达式匹配如果前面没有关键字

regex - 行尾如何影响这里的正则表达式?

regex - Perl 使用哪种 POSIX 风格的正则表达式?

javascript - inherit.js 中的奇怪正则表达式(John Resig 着)——为什么、什么以及如何?