用正则表达式改变字符串

时间:2014-04-16 08:07:31

标签: javascript regex

我想用正则表达式更改文本字符串,删除除+符号外的每个非数字字符。但只有它是第一个角色

   +23423424dfgdgf234 --> +23423424234
   2344  234fsdf  9   --> 23442349
   4+4                --> 44

替换“除了之外的一切”非常简单:
/[^\+|\d]/gi但这也将+ -sign删除为第一个字符。

我怎样才能改变正则表达式以获得我想要的东西?

如果重要:我在javascript的str.replace()函数中使用正则表达式。

5 个答案:

答案 0 :(得分:3)

我会分两步完成,首先删除+除了必须删除的所有内容,然后删除不是第一个字符的+

var str2 = str1.replace(/[^\d\+]+/g,'').replace(/(.)\++/g,"$1")

答案 1 :(得分:1)

您可以替换以下正则表达式

带有[^\d+]

''

然后在结果字符串上,替换

带有(.)\+

'$1'

演示:http://regex101.com/r/eT6uF6

更新:http://jsfiddle.net/QVd7R/2/

答案 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("");