成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在 JavaScript 中替換所有指定字符 3 種方法

開發 前端
在 JS 最新的提案String.prototype.replaceAll() 中,它將replaceAll()方法用于字符串。在該提案還沒出來之前,我們來看看在 JS 中有哪些方法可以實現 reaplceAll 的效果。

本文轉載自微信公眾號「大遷世界」,轉載本文請聯系大遷世界公眾號。

在 JS 沒有提供一種簡便的方法來替換所有指定字符。 在 Java 中有一個 replaceAll() ,replaceAll(String regex, String replacement))方法使用給定的參數 replacement 替換字符串所有匹配給定的正則表達式的子字符串。

在 JS 最新的提案String.prototype.replaceAll() 中,它將replaceAll()方法用于字符串。

在該提案還沒出來之前,我們來看看在 JS 中有哪些方法可以實現 reaplceAll 的效果。

第一種:使用 split 和 join 的方法

這種方法,主要包含二個階段:

  • 使用 split 方法,根據指定的字符將字符串分成多個部分。
  • 然后使用 join 方法將分割的多個部分連接在一直,并在它們之間插入指定的字符。

例如,我們將字符串'1+2+3'中的+替換為-。首先,通過split方法根據 +分割符將'1+2+3'分開,得到['1','2','3']。然后通過 join 方法并指定連接字條-,得到結果'1-2-3'。示例如下:

  1. const search = 'duck'
  2. const replaceWith = 'goose'
  3.  
  4. const result = 'duck duck go'.split(search).join(replaceWith); 
  5.  
  6. result; // => 'goose goose go' 

'duck duck go'.split('duck')將字符串分割成幾段:['', ' ', ' go']。['', ' ', ' go'].join('goose') 在元素之間插入'goose'并連接起來,得到'goose goose go'。

最后我們把這種方式封裝成一個幫助函數 replaceAll:

  1. function replaceAll(string, search, replace) { 
  2.   return string.split(search).join(replace); 
  3.  
  4. replaceAll('abba', 'a', 'i');          // => 'ibbi' 
  5. replaceAll('go go go!', 'go', 'move'); // => 'move move move!' 
  6. replaceAll('oops', 'z', 'y');          // => 'oops' 

這種方法需要將字符串轉換為數組,然后再轉換回字符串。這是一種變通方法,但不是一個好的解決方案。

2. 使用全局正則表達式replace()

String.prototype。replace(regExp, replaceWith)搜索正則表達式regExp出現的情況,然后使用replaceWith字符串替換所有匹配項。

必須啟用正則表達式上的全局標志,才能使replace()方法替換模式出現的所有內容,我們可以這樣做:

  • 在正則表達式文字中,將g附加到標志部分:/search/g。
  • 對于正則表達式構造函數,使用 flags 參數:new RegExp('search', 'g')

我們把所有的duck換成goose:

  1. const searchRegExp = /duck/g 
  2. const replaceWith = 'goose' 
  3.  
  4. const result = 'duck duck go'.replace(searchRegExp, replaceWith) 
  5.  
  6. result // 'goose goose go' 

正則表達式文字/duck/g與'duck'字符串匹配,并且啟用了全局模式。

'duck duck go'.replace(/duck/g, 'goose')用'goose'替換所有匹配/duck/g字符串。

通過向正則表達式添加i標志,可以忽略大小寫:

  1. const searchRegExp = /duck/gi; 
  2. const replaceWith = 'goose'
  3.  
  4. const result = 'DUCK duck go'.replace(searchRegExp, replaceWith); 
  5.  
  6. result; // => 'goose goose go' 

再次查看正則表達式:/duck/gi。 正則表達式啟用了不區分大小寫的搜索:i和全局標志g。 /duck/gi匹配'duck',以及'DUCK','Duck'等。

'DUCK duck go'.replace(/duck/gi, 'goose')以不區分大小寫的方式用'goose'替換了/duck/gi`所匹配到的結果。

雖然正則表達式替換了所有出現的字符串,但在我看來,這種方法過于繁瑣。

(1) 字符串中的正則表達式

當在運行時確定搜索字符串時,使用正則表達式方法不方便。 從字符串創建正則表達式時,必須轉義字符-[] / {}()* +? 。 \ ^ $ |,示例如下:

  1. const search = '+' 
  2.  
  3. const searchRegExp = new RegExp(search, 'g') // // 拋出 SyntaxError 異常 
  4. const replaceWith = '-' 
  5.  
  6. const result = '5+2+1',replace(searchRegExp, replaceWith ) 

上面的代碼片段嘗試將搜索字符串'+'轉換為正則表達式。 但是'+'是無效的正則表達式,因此會引發SyntaxError: Invalid regular expression: /+/異常。

(2) 字符串的 replace() 方法

如果replace(search, replaceWith)的第一個參數是字符串,那么該方法只替換search的第一個結果。

  1. const search = 'duck'
  2. const replaceWith = 'goose'
  3.  
  4. const result = 'duck duck go'.replace(search, replaceWith); 
  5.  
  6. result; // => 'goose duck go' 

'duck duck go'.replace('duck','goose')僅將'duck'的首次出現替換為'goose'。

3. replaceAll() 方法

最后,新的提案

String.prototype.replaceAll()(在第3階段)將replaceAll()方法引入到 JavaScript 的字符串中。

replaceAll(search, replaceWith)字符串方法用replaceWith替換所有的search字符串,沒有任何變通方法。

我們把所有的duck換成goose:

  1. const search = 'duck' 
  2. const replaceWith = 'goose'
  3.  
  4. const result = 'duck duck go'.replaceAll(search, replaceWith); 
  5.  
  6. result; // => 'goose goose go' 

'duck duck go'.replaceAll('duck', 'goose')將所有出現的'duck'字符串替換為'goose',這是簡單明了的解決方案。

(1) replaceAll()與replace()的區別

字符串方法replaceAll(search, replaceWith)和replace(search, replaceWith)的行為方式是一樣的,除了兩件事:

  • 如果search參數是一個字符串,那么replaceAll()用replaceWith替換所有出現的search,而replace()只替換第一次出現的search。
  • 如果search參數是一個非全局正則表達式,那么replaceAll()將拋出一個TypeError 異常。

4. 總結

替換所有出現的字符串應該很容易。 但是,JavaScript 很久一段時間沒有提供這種方法。

一種方法是通過搜索字符串將字符串拆分為多個塊,將字符串重新連接,然后在塊之間放置替換字符串:string.split(search).join(replaceWith)。 這種方法有效,但是很麻煩。

另一種方法是將String.prototype.replace()與啟用了全局搜索的正則表達式一起使用:string.replace(/SEARCH/g, replaceWith)。

不幸的是,由于必須轉義正則表達式的特殊字符,因此在運行時無法輕松地從字符串生成正則表達式。 處理正則表達式以簡單地替換字符串的方法非常麻煩。

最后

String.prototype.replaceAll()方法可以輕松地直接替換所有出現的字符串:string.replaceAll(search, replaceWith)。 這是第3階段的提案,但希望很快就會納入新的JavaScript標準。

我的建議是使用replaceAll()來替換字符串。但你需要一個polyfill來使用這個方法。

 

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2020-10-16 18:35:53

JavaScript字符串正則表達式

2021-11-11 14:50:01

JavaScriptarry編程開發

2020-08-01 16:19:13

JavaScript字符串開發

2018-12-19 19:30:46

JavaScript創建對象前端

2009-10-12 10:33:11

Javascript替

2024-08-29 08:04:14

2021-11-05 21:36:59

JavaScript語言開發

2018-08-02 09:50:47

Linux命令用戶信息

2010-11-22 12:04:09

MySQL字段

2010-07-14 16:37:33

SQL Server拆

2020-12-26 14:48:21

UbuntuLinuxDeb文件

2021-05-28 08:23:03

JavaScriptSet編程

2019-06-04 11:17:39

Windows Linux命令

2010-06-03 08:55:43

LINQ

2020-12-14 10:50:13

Linux命令文件

2020-09-03 10:13:49

JavaScript字符串pad

2020-06-18 10:26:43

JavaScript開發技術

2020-09-19 18:03:42

Docker

2022-05-31 16:00:46

Go 編程語言復制文件Go 標準庫

2020-07-24 20:45:51

Spark數據集函數
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www国产亚洲精品久久网站 | 午夜天堂精品久久久久 | 欧美激情第一区 | 免费亚洲一区二区 | 91精品国产综合久久久久久 | 北条麻妃一区二区三区在线视频 | 久久精品欧美电影 | 日本 欧美 国产 | 亚洲国产小视频 | 国产激情精品视频 | 国产三级国产精品 | 国产精品视频在线观看 | 亚洲精品在线视频 | 国产人成在线观看 | 日韩免费一区 | 国产日韩欧美在线 | 国色天香成人网 | 色综合久 | 久久一区二区三区四区 | 国产亚洲一级 | 日本不卡一区 | 成人免费区一区二区三区 | 日日天天 | 国产精品不卡 | 蜜桃在线一区二区三区 | 人人做人人澡人人爽欧美 | 精品国产乱码久久久久久图片 | 久久三区| 亚洲一区二区三区在线视频 | 日韩欧美二区 | 欧洲色| 欧美日韩精品一区二区三区四区 | 国产精品久久久久久238 | 午夜a v电影| 国产一区二区视频免费在线观看 | 一区二区在线不卡 | 韩国av电影网 | 国产亚洲一级 | 欧美日韩视频 | 亚洲欧美激情网 | 亚洲欧美日韩高清 |