[英]Word boundary regexp in JavaScript
假設我有以下字符串:
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 regex引擎中的\\b
不能與非拉丁字母一起正常使用。
您可以按照以下方式使用:
yourString.replace(/(^|[^0-9a-zа-я])(some)(?![0-9a-zа-я])/gi, '$1<$2>')
請注意,當WiktorStribiżew對另一個答案進行評論時,您的字符類僅與基本的西里爾字母匹配,而會錯過其他西里爾字母。 一種替代方法是停止使用否定的字符類,如果更易於枚舉,則匹配您希望作為單詞分隔符的字符。 在這種情況下, ["\\s]
似乎是一個不錯的開始:
yourString.replace(/(^|[\s"])(some)(?![^\s"])/gi, '$1<$2>')
分組並捕獲打開和關閉備選方案,並將這些捕獲結果也包括在替換字符串中:
var regex = /(^|[^0-9a-zа-яё])(some)([^0-9a-zа-яё]|$)/gi; var output = 'bla bla "some" bla bla some bla bla something'.replace(regex, '$1<$2>$3'); console.log(output);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.