我有这个函数,它在逗号后添加了一个额外的空格。
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, " ");
}
如何修改以应用多个字符,我的意思是我想将此函数除了逗号应用于. ! ? :
字符之外。
任何人都知道如何解决?
答案 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));