簡體   English   中英

String.replace正則表達式未替換字符串中的*

[英]String.replace regex is not replacing `*` in string

我有一個字符串輸入,正在運行string.replace ,它沒有從字符串中刪除*字符,但正在刪除| 字符。

 var s = "|*55.6"; s = s.replace(/[^0-9.]/, ""); console.log(s); 

如果要替換多個匹配項,請使用全局正則表達式/.../g ):

s = s.replace(/[^0-9.]+/g, "") //=> "55.6"

編輯:+跟隨模式( 連續匹配一個模式中的多個模式)將產生較少的匹配,因此,用""進行替換比單獨使用g標志更有效地運行。 我會一起使用它們。 感謝Jai面前的回答中使用了這種技術。


演示片段

 var s = "|*55.6" s = s.replace(/[^0-9.]+/g, "") console.log(s) //=> "55.6" 

您尚未為正則表達式使用全局標志 ,這就是為什么替換第一次出現而不是操作結束的原因。

 var s = "|*55.6"; s = s.replace(/[^\\d.]/g, ""); console.log(s); 

如果單獨出現[^\\d.] ,單獨使用+量詞將無濟於事,盡管與g標志一起使用會更好。 例如;

 var s = "|*55.6a" s = s.replace(/[^0-9.]+/, "") console.log(s) //=> "55.6a not OK 

這是因為replace只執行一次。 使用g選項替換每個匹配項。

s = s.replace(/[^0-9.]/g, "");

您缺少+尋找一個或多個事件:

 var s = "|*55.6"; s = s.replace(/[^0-9.]+/, ""); console.log(s); 

另外,如果您有興趣取出數字,則可以使用.match()方法:

 var s = "|*55.6"; s = s.match(/[(0-9.)]+/g)[0]; console.log(s); 

替換字符串時,需要使用全局( g )標志/修飾符加號( + )量

 var s = "|*55.6"; s = s.replace(/[^0-9.]/g, ""); console.log(s); 

 var s = "|*55.6"; s = s.replace(/[^0-9.]+/, ""); console.log(s); 

一些答案提到了Quantifiers + ,但它仍只會替換第一個匹配項:

 console.log("|*45.6abc".replace(/[^0-9.]+/, "")) 

如果您需要刪除所有非數字字符( .除外),則仍然需要修飾符/標志g

 console.log("|*45.6,34d".replace(/[^0-9.]+/g, "")); 

暫無
暫無

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

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