我有一个像这样的字符串
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";
答案 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'子串是 ...
这些规则对于防止在424
和442
中捕获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);
}
答案 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, '');
}