在逗号和句号后添加空格,但如果是十进制分隔符,则不添加空格

add spaces after commas and full stops, but not if it is a decimal separator

本文关键字:添加 空格 十进制 分隔符 如果      更新时间:2024-04-02

我有一个表单,里面有一个文本字段,用来填充网站的用户。用户通常不会在逗号和句号后加空格。如何用javascript格式化这个文本区域,以便在逗号和句号后面添加空格,但要保留这些字符,即表示数字的十进制分隔符。我试过使用replace(/',/g,', '),但这也在数字的小数分隔符后面加了空格。

感谢

这里是使用拆分的非RegExp解决方案:

function fixString(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(/'s's+/g," ");
}

然后使用它,只需像这样调用fixString(my_string)

var str_old = "a,1b,c,d2,e,3f4,g, this is a test, 1,000 yay!,2,000,ok?";
var str_new = fixString(str_old);
//str_old: a,1b,c,d2,e,3f4,g, this is a test, 1,000 yay!,2,000,ok?
//str_new: a, 1b, c, d2, e, 3f4, g, this is a test, 1,000 yay!, 2,000, ok?

然而,正如我在评论中所说,当有人说"my lucky number is 7,4 out of 5 cats purr"时,你会得到意想不到的结果。

使用捕获组和负数标识符。

var test = "i believe.1.5.today";
test = test.replace(/([^'d])'.([^'d])/g,'$1. $2').replace(/(['d])'.([^'d])/g,'$1. $2').replace(/([^'d])'.(['d])/g,'$1. $2')
// test == "i believe. 1.5. today"

然而,如果你有两个句子由两个数字分隔,例如,"…………blah 1.2是数字……",那么这不会插入空格。

您可以将正则表达式扩展为逗号,也可以只使用相同的模板。

您需要向正则表达式添加更多上下文——也许逗号之类的东西必须与字母接触?,replace(/[a-zA-Z]?,.?/gi, ', ')