如何使用JavaScript Regex从字符串中删除剩余的逗号?

时间:2013-09-26 07:07:50

标签: javascript regex

我正在尝试将动态地址构建器与GMap Geocoder结合使用。

我的代码如下:

HTML

<input type="text" class="address" />
<input type="text" class="city" />
<input type="text" class="state" />
<input type="text" class="zipCode" />
<input type="text" class="country" />

的JavaScript

$('.address, .city, .state, .zipCode, .country').blur(
    function()
    {
        var address = '';

        address += $('.address').val() + ', ';
        address += $('.city').val() + ', ';
        address += $('.state').val() + ', ';
        address += $('.zipCode').val() + ', ';
        address += $('.country').val();

        console.log(address);
    }
);

现在的问题:

当我模糊地址字段时,我在控制台中收到以下内容:

MyAddress, , , ,

另外,在某些情况下(至少对于我的区域),同一位置有两个名称,我们使用昏迷来分隔它们。例如,地址可以变成这样:

MyAddress, MySecondAddress, Cityname, State, zipCode, Country

问题:

当地址自动构建时,如何使用正则表达式从地址字符串中删除剩余的逗号?

3 个答案:

答案 0 :(得分:3)

一种可能的方法:

address = address.replace(/,(?:\s*,)+/g, ',').replace(/^,|,$/g, '');

但实际上,我可能会有所不同:将所有非空值收集到一个数组中,然后将此数组与','连接:

var $addressFields = $('.address, .city, .state, .zipCode, .country');

$addressFields.blur(function() {
  var nonEmptyParts = $.map($addressFields, function(inp) {
    var inputStr = $.trim(inp.value);
    return inputStr === '' ? null : inputStr;
  });
  var fullAddress = nonEmptyParts.join(',');
  console.log(fullAddress);
});

我在这里使用了$.map的一个方便功能:当回调函数返回null(或undefined)时,该值不会添加到结果数组中。

答案 1 :(得分:2)

您应该更正问题的根源,而不是删除额外的逗号。首先,你不应该以这种方式添加逗号;正如你所看到的那样,即使字段是空的,它也会添加逗号。

请尝试这样的事情:

<强> HTML:

<form id="myform">
    <input type="text" class="address" name="address" />
    <input type="text" class="city" name="city" />
    <input type="text" class="state" name="state" />
    <input type="text" class="zipCode" name="zipCode" />
    <input type="text" class="country" name="country" />
</form>

<强> JS:

var address = [];

// no need for that long line of selectors
$("#myform > input").blur(function(e){
    if ($(this).val()) { // only add this field if it has a value
        address.push($(this).val());
    }
    console.log(address.join(', ')); // tada, no more extra commas
});

如果您的表单有其他输入,请使用div对输入进行分组。

答案 2 :(得分:0)

address = address.replace(/( ?,)+/, '');