2017-04-19 29 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。 –

相关问题