javascript - 在给定字符之前删除多余的空格

时间:2013-12-07 15:51:00

标签: javascript regex special-characters str-replace

我有这个函数,它在逗号后添加了一个额外的空格。

 function fixString1(inp){
    var i, len, arr, outp, Rside, Lside, RsideIsNum, LsideIsNum;

    arr = inp.split(",");
    outp = "";

    for(i=1, len=arr.length; i<len; i++){
        Lside = arr[i-1];
        Rside = arr[i];

        LsideIsNum = /\d/.test(Lside.charAt(Lside.length-1));
        RsideIsNum = /\d/.test(Rside.charAt(0));

        outp += "," + ((LsideIsNum && RsideIsNum)?"":" ") + Rside;
    }

    return (arr[0] + outp).replace(/ {2,}/g, " ");
}

如何修改以应用多个字符,我的意思是我想将此函数除了逗号应用于. ! ? :字符之外。

任何人都知道如何解决?

3 个答案:

答案 0 :(得分:1)

在函数声明中再添加一个参数,表示该字符。如果只想运行一次该功能,则可以在分割功能中提供一组字符,例如inp.split(".,'")

答案 1 :(得分:1)

我不确定我完全理解你想做什么,但我认为你可以更简洁地做到这一点:

function fixString1( inp ) {
  return inp.replace(/(\d)\s+([,!?:.])\s*(\d)/g, "$1$2$3")
    .replace(/\s*([,!?:.])\s+/g, "$1 ");
}

第一个正则表达式查找特殊字符两侧的数字,左侧有中间空格,右侧可能有中间空格。它用两位数字和特殊字符替换它,没有空格。

第二个正则表达式处理特殊字符周围的所有其他空格。它摆脱了所有这些空间,并确保在特殊字符后面有一个空格。

答案 2 :(得分:0)

没有正则表达的解决方案。
jsFiddle

var str = "    a   a    givi , asdad , saba  a   .  sdada! hasdjahj    ?  asdas asd as   luka    ,      ";

function fixString(str) {
    var temp = "",
        count = 0;
    str.split("").forEach(function (value, index, array) {
        var next = array[index + 1],
            x = value.charCodeAt(),
            isChar = ((x >= 65 && x <= 90) || (x >= 97 && x <= 122));
        if (value === " ") {
            count++;
        } else if (count > 0 && value !== " ") {
            temp += ((next && next !== " ") || (temp.length > 0 && isChar) ? " " : "") + value;
            count = 0;
        } else {
            temp += value;
        }
    });
    return temp;
}
console.log(fixString(str));