簡體   English   中英

JavaScript正則表達式替換字符串的所有部分,但包含特定字符串的部分除外

[英]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也不是空格的任何字符

在線RegEx演示

暫無
暫無

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

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