javascript从字符串中删除数字(n1,n2,...)

时间:2014-04-02 09:04:31

标签: javascript regex string

我有一个像这样的字符串

var s="15,4,6,8,10,3";

我需要使用像这样的js创建一个函数:

注意:字符串中的数字是唯一的

removeNumber(4);

应该返回:

s="15,6,8,10,3";

这样:

removeNumber(15);

应该返回:

s="4,6,8,10,3";

3 个答案:

答案 0 :(得分:4)

一种可能的方法:

var s = "15, 4, 6, 8, 10, 3";
function removeNumber(str, num) {
  var reg = new RegExp('(?:\\D+|^)' + num + '(?=\\D|$)');
  return str.replace(reg, '').replace(/^\D*/, '');

  // or with a single replace:
  // var reg = new RegExp('^' + num + '(?:\\D+|$)|\\D+' + num + '(?=\\D|$)');
  // return str.replace(reg, '');
}

这适用于分隔数字的任意数量的空格。事实上,它可以用于分隔数字的任何东西。 )


说明:对于给定的数字(假设它是42),创建了以下正则表达式:

/(?:\D+|^)42(?=\D|$)/

这读作确保'42'子串是 ...

  • 前面至少有一个非数字符号,或者位于字符串的最开头
  • 后跟一个非数字符号,或者位于字符串
  • 的最后

这些规则对于防止在424442中捕获42是必要的(感谢@ Newbo.O提及)。

请注意,目标号码前面的非数字符号由正则表达式与数字本身一起使用。这在所有情况下都很好 - 但是当这个数字是这个字符串中的第一个时,就会出现一个复杂的问题:你实际上必须删除这个数字以及下面的符号,而不是前面的符号。

虽然可以在单个正则表达式(交替)中考虑这种情况:

/^42(?:\D+|$)|\D+42(?=\D|$)/

...使用简单模式进行最终扫描要容易得多:

/^\D*/

...即'替换字符串开头的所有非数字符号'。

答案 1 :(得分:0)

试试这个:

function removeNumber(n, s) {
    var xs = JSON.parse("[" + s + "]");
    var index = xs.indexOf(n);
    if (index < 0) return s;
    xs.splice(index, 1);
    return String(xs);
}

请参阅演示:http://jsfiddle.net/NmU7C/

答案 2 :(得分:-1)

试试这个未经测试的:

var s = "15, 4, 6, 8, 10, 3";
function removeNumber(str, num) {
  var reg = new RegExp('\\b' + num + '\\b');
  return str.replace(reg, '');
 }