Javascript 链接JS方法

Javascript 链接JS方法,javascript,jquery,Javascript,Jquery,如果字符串符合某种格式,我将尝试在字符串中插入一些空格。具体来说,如果字符串仅由数字组成,且长度正好为五个字符,则应在第三个和第四个数字之间添加空格 出于某种原因,链接.split()、.splice()和.join()似乎不会返回任何内容。我哪里出错了?为什么不直接使用正则表达式本身呢 var num_regex = /^(\d\d\d)(\d\d)$/, input = $("#distributor-search").val(), address = inpu

如果字符串符合某种格式,我将尝试在字符串中插入一些空格。具体来说,如果字符串仅由数字组成,且长度正好为五个字符,则应在第三个和第四个数字之间添加空格


出于某种原因,链接
.split()
.splice()
.join()
似乎不会返回任何内容。我哪里出错了?

为什么不直接使用正则表达式本身呢

var num_regex = /^(\d\d\d)(\d\d)$/,
        input = $("#distributor-search").val(),
      address = input.match(num_regex);
if (address) address = address[1] + ' ' + address[2];

该正则表达式匹配一个五位字符串,并将前三位和后两位数字分组在一起。如果测试字符串匹配,则
.match()
函数返回一个数组,其中两个组位于位置1和2(位置0是整个匹配)。

正如其他人所解释的,您的函数不起作用,因为
.splice()
返回已删除的元素,而不是结果数组

请尝试使用以下正则表达式:

/^(\d\d\d)(\d\d)$/
它将只匹配一个长度为5位的字符串,不会修改其他字符串

示例:

var s = '123456'.replace(/^(\d\d\d)(\d\d)$/, '$1 $2');
// "123456"
var s = '1234'.replace(/^(\d\d\d)(\d\d)$/, '$1 $2');
// "1234"
var s = '12345'.replace(/^(\d\d\d)(\d\d)$/, '$1 $2');
// "123 45"
因此,在你的情况下:

address = $("#distributor-search").val().replace(/^(\d\d\d)(\d\d)$/, '$1 $2');
splice(3, 0 , ' ').join()
返回一个数组,返回包含已删除的元素的数组,并返回所连接的数组

看来在
splice()
上一切都出了问题。你得到的不是剩余物,而是被移除的物品

我的测试:

var input = '123,789';
var output = input.split(',').splice(1, 0, '456').join(',');

console.log(output); // outputs nothing, because `splice(1, 0, '456')` doesn't remove any values
您可以通过制作一个使用splice功能的原型来解决这个问题,如下所示:

Array.prototype.isplice = function() {
    var tmp = this;

    Array.prototype.splice.apply(tmp, Array.prototype.isplice.arguments);

    return tmp;
};

var output = input.split(',').isplice(1, 0, '456').join(',');
console.log(output); // outputs ["123", "456", "789"] as expected

在您的情况下,不能将接头与连接连接在一起:

address = $("#distributor-search").val().replace(/^(\d\d\d)(\d\d)$/, '$1 $2');
splice(3, 0 , ' ').join()

请记住,splice返回一个包含删除项的新数组,而不是结果数组。

您的输入值是什么?任何五位字符串,即“12345”。您看过JSFIDLE?+1了吗?它对函数的实际功能以及为什么不能按预期工作有一个简单的解释。我想到在数组中插入元素是很奇怪的。他们的第一个示例似乎是在不删除任何内容的情况下添加元素。@JezenThomas您应该使用
.push()
来添加元素@杰森托马斯啊!这似乎就是问题所在!因为
splice()。如果你使用我的原型,它应该工作得很好。这个技巧是在数组中添加元素的真正方法。这个解决方案很聪明,但在我看来,您应该避免与内置对象发生冲突,并将其实现为您自己的对象或作为独立函数。这是因为内置对象是全局的,这可能会在代码或您使用的其他库中产生兼容性问题。在我看来,如果您要使用正则表达式替换某些内容,为什么不在执行时使用
.replace()
?@Cerbrus是的,这是一个很好的观点-取决于值的其他部分发生了什么;如果没有,那么替换是个好主意。