2017-04-19 49 views
0

我想用正則表達式替換正則表達式我有。當我使用匹配方法時,它會返回具有正確索引和匹配的數組,但是當我使用replace並添加替換字符串時它不起作用。JavaScript的正則表達式匹配的作品,但替換不工作

var a = "$#,##0.00".match("[\\d+-,#;()\\.]+"); 
console.log(a); 

返回["#,##0.00", index: 1, input: "$#,##0.00"]

var b = "$#,##0.00".replace("[\\d+-,#;()\\.]+",""); 
console.log(b); 

返回$#,##0.00,而我希望它返回只是$

有人能指出我在做什麼錯誤?由於 鏈接到的例子是:

var a = "$#,##0.00".match("[\\d+-,#;()\\.]+"); 
 
console.log(a); 
 
var b = "$#,##0.00".replace("[\\d+-,#;()\\.]+",""); 
 
console.log(b);

+0

你傳遞一個字符串來代替'()'? – adeneo

+0

是的,一個空字符串,因爲我只想$作爲我的結果 – phantomsays

回答

3

.match只接受正則表達式。因此,如果提供了一個字符串,.match將使用new RegExp明確地將其轉換爲正則表達式。

.replace但是同時接受一個字符串(這將作爲搜索字面意思)或正則表達式,如果您希望它使用正則表達式,您必須傳入正則表達式。

var b = "$#,##0.00".replace(new RegExp("[\\d+-,#;()\\.]+"), ""); 
//       ^^^^^^^^^^^    ^

或使用文字一個正則表達式:

var b = "$#,##0.00".replace(/[\d+-,#;()\.]+/, ""); 
+0

ohh!我不知道,我認爲默認情況下更換消耗一個reg exp。感謝您指出 – phantomsays

+1

+1來回答,只需指出另一種可能的方式:var a =「$#,## 0.00」; var b = a.replace(a.match(「[\\ d + - ,#;()\\。] +」),「」); 也可以,因爲a.match(...)將是一個字符串 – repeatdomiau

+0

@GabrielMilitello從美國到日本的最快方式是在大西洋上空,呃? :d。 –

相關問題