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