假设我有以下字符串:
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>')
请注意,如 Wiktor Stribiżew对另一个答案的评论,您的 Angular 色类别仅匹配 basic Cyrillic alphabet并且会错过其他西里尔字母字符。另一种方法是停止使用否定字符类,而是匹配您期望作为单词分隔符的字符(如果它们更容易枚举)。从这个 Angular 来看,["\s]
似乎是一个好的开始:
yourString.replace(/(^|[\s"])(some)(?![^\s"])/gi, '$1<$2>')
关于javascript - JavaScript 中的单词边界正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717777/