[英]JavaScript regex replace all parts of a string except parts that contain a specific string
假設我有以下字符串Hello World
並且想用x
替換其中不包含o
或空格的所有部分。 使用正則表達式,我可以簡單地執行以下操作:
var myStr = "Hello World"; console.log(myStr.replace(/[^o ]/g, "x"));
現在,如果我想用x
替換不包含字符串ll
或空格的字符串的所有部分,該怎么辦? 我嘗試了這個,但是沒有運氣:
// intended result: xxllx xxxxx var myStr = "Hello World"; console.log(myStr.replace(/[^ll ]/g, "x"));
似乎ll
解釋為單獨的字符,而不是字符序列。 我將如何使用正則表達式解決此問題並使用replace
方法?
匹配並捕獲您想要保留的內容,匹配其他所有內容以替換:
var myStr = "Hello World"; console.log(myStr.replace(/(ll| )|[\\s\\S]/g, (x,y) => y || "x"));
在ES6 +之前:
var myStr = "Hello World"; console.log(myStr.replace(/(ll| )|[\\s\\S]/g, function (x,y) { return y || "x"; }) );
因此, (ll| )|[\\s\\S]
匹配並捕獲到組1 ll
或一個空格中,或僅將任何char與[\\s\\S]
匹配(您可以在任何JS環境中使用[^]
)或一個.
與/s
改性劑(在ECMAScript2018 +兼容的環境)),並且如果組1個匹配( y
在上面的代碼)時,它被返回。 否則,用x
代替。
您可以使用以下純正則表達式解決方案:
var str = 'Hello World'; var re = /(?<!l)l(?!l)|[^l ]/g; var repl = str.replace(re, 'x'); console.log(repl); //=> xxllx xxxxx
正則表達式詳細信息:
(?<!l)l(?!l)
匹配l
,如果后面沒有和前面還有一個l
|
; 要么 [^l ]
:匹配不是l
也不是空格的任何字符
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.