簡體   English   中英

正則表達式匹配除“DC”之外的所有標點符號

[英]Regex match all punctuations except 'D.C.'

我正在嘗試編寫一個查找所有標點符號 [.!?] 的正則表達式,以便將下一個單詞大寫,但是如果句點是字符串 'DC' 的一部分,它應該被忽略,到目前為止我有第一部分工作,但不確定如何忽略“DC”

const punctuationCaps = /(^|[.!?]\\s+)([az])/g;

您可以匹配DC部分並使用您已有的 2 個捕獲組進行交替。

在其中一組的替換檢查中。 如果存在,則將它們連接起來形成第 2 組 toUpperCase(),否則返回將 DC 保留在字符串中的匹配項。

 const regex = /D\\.C\\.|(^|[.!?]\\s+)([az])/g; let s = "this it DC test. and? another test! it is."; s = s.replace(regex, (m, g1, g2) => g2 ? g1 + g2.toUpperCase() : m); console.log(s);

使用負前瞻:

 var str = 'is DC a capital? i don\\'t know about XY stuff.'; var result = str.replace(/(^|[.!?](?<![AZ]\\.[AZ]\\.)\\s+)([az])/g, (m, c1, c2) => { return c1 + c2.toUpperCase(); }); console.log('in: '+str); console.log('out: '+result);

控制台輸出:

in:  is D.C. a capital? i don't know about X.Y. stuff.
out: Is D.C. a capital? I don't know about X.Y. stuff.

解釋:

  • (^|[.!?]) - 期待字符串的開始,或標點字符
  • (?<![AZ]\\.[AZ]\\.) - 負前瞻:但不是高位字符和點的序列,重復兩次
  • \\s+ - 期待一個或多個空白字符
  • 由於括號,上述所有內容都被捕獲
  • ([az]) - 期望一個小寫字符,在第二個捕獲組的括號中

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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