簡體   English   中英

JavaScript中的單詞邊界正則表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM