我有一个带有文本字段的表单,用于填充网站用户。用户通常不会在逗号和句号后放置空格。如何使用javascript这个文本区域格式化,以便在theese逗号和句号后添加空格,但留下那些表示数字的小数分隔符的字符。我已尝试使用replace(/\,/g,', ')
,但这也会在数字的小数分隔符之后放置空格。
谢谢
答案 0 :(得分:1)
使用捕获组和负数字标识符。
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"
但是,如果你有两个句子用2个数字分隔,例如,“...... blah 1.2是数字......”那么这将不会插入空格。
您可以扩展逗号的正则表达式或只使用相同的模板。
答案 1 :(得分:1)
这里是使用split的非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"
时,你会得到意想不到的结果。
答案 2 :(得分:-1)
你需要为正则表达式添加更多上下文 - 也许像逗号必须触及一个字母?replace(/[a-zA-Z]?,.?/gi, ', ')