我想用正则表达式更改文本字符串,删除除+符号外的每个非数字字符。但只有它是第一个角色
+23423424dfgdgf234 --> +23423424234
2344 234fsdf 9 --> 23442349
4+4 --> 44
等
替换“除了之外的一切”非常简单:
/[^\+|\d]/gi
但这也将+ -sign删除为第一个字符。
我怎样才能改变正则表达式以获得我想要的东西?
如果重要:我在javascript的str.replace()函数中使用正则表达式。
答案 0 :(得分:3)
我会分两步完成,首先删除+
除了必须删除的所有内容,然后删除不是第一个字符的+
:
var str2 = str1.replace(/[^\d\+]+/g,'').replace(/(.)\++/g,"$1")
答案 1 :(得分:1)
答案 2 :(得分:1)
您必须分两步完成此操作:
// pass one - remove all non-digits or plus
var p1 = str.replace(/[^\d+]+/g, '');
// remove plus if not first
var p2 = p1.length ? p1[0] + p1.substr(1).replace(/\+/g, '') : '';
console.log(p2);
答案 3 :(得分:1)
您可以在一个RegExp中结合上面建议的2个替换:
var numberWithSign = /(^\+)|[^\d]+/g;
var tests =
[
{"input" : "+23423424dfgdgf234", "output" : "+23423424234"},
{"input" : "2344 234fsdf 9" , "output" : "23442349"},
{"input" : "4+4" , "output" : "44"},
{"input" : "+a+4" , "output" : "+4"},
{"input" : "+a+b" , "output" : "+"},
{"input" : "++12" , "output" : "+12"}
];
var result = true;
for (index in tests) {
var test = tests[index];
testResult = test.input.replace(numberWithSign,"$1");
result = result && (testResult == test.output);
if (!result) {
return testResult + "\n" + test.output;
}
}
return result;
基本上第一部分(^\+)
只匹配行开头的+号,并将其设为$1
,因此当您将此匹配替换为$1
时,它将会将加号保留在字符串的开头。如果它不匹配,那么regexp [^\d]+
的下一部分将生效,用空字符串替换所有非数字(因为$1
的值没有任何内容)
答案 4 :(得分:1)
试试这个:
var newString = Yourstring.match(/(^\+)?\d*/g).join("");