我需要一个正则表达式,它可以匹配除空格之外的任何内容或者只有双空格之间的单词。
喜欢:
我们假设underscores
等于spaces
,例如。
foo_bar__The_Quick_Dog__is_addicted_to___jumping___
然后replace
spaces
与任何symbol
,最好是Comma (,)
。
所以我们应该: foo bar,The Quick Dog,沉迷于,跳跃。
然而,跳跃这个词不应该用comma
替换它的空格,因为它最后......向它添加comma
将毫无意义
我试过了:
/\(\s*([^)]+?)\s*\)/
和
[a-z].\s{2,}.*
和
\s\s.*[a-z]
和
(?:[a-zA-Z0-9]+[ ])+[a-zA-Z0-9]+
还有几百个......仍然没有好处。
感谢
答案 0 :(得分:2)
你的意思是这样吗?
var str = 'foo bar The Quick Dog is addicted to jumping ';
str.replace(/\s\s+/g, ', ').replace(/, (\n|$)/g, '.$1');
"foo bar, The Quick Dog, is addicted to, jumping."
用“逗号空格”替换多个空格,然后用<替换“逗号空间新行”或“逗号空间结束” em>“完全停止新行”或“句号结束”。
答案 1 :(得分:1)
使用替换者(mdn doc):
var s = 'foo bar The Quick Dog is addicted to jumping ';
s.replace(/ {2,}(.)?/g, function (m, p) { return p ? ', ' + p : '.'; });
// prints "foo bar, The Quick Dog, is addicted to jumping."
使用match
+ join
。这个也削减了领先的空白:
var s = ' foo bar The Quick Dog is addicted to jumping ';
var m = s.match(/[^ ]+( [^ ]+)*/g);
m && (m.join(', ') + '.'); // null OR join()
// prints "foo bar, The Quick Dog, is addicted to jumping."
函数内的 match
+ join
:
function fix(str, separator) {
var m = str.match(/[^ ]+( [^ ]+)*/g);
return m && (m.join(separator || ', ') + '.');
}
var s = ' ab cd ef gh ';
fix(s); // "ab cd, ef, gh."
fix(s, ' - '); // "ab cd - ef - gh."
fix(' '); // null