1

我需要一个正则表达式,它可以匹配除空格或双空格之间的单词以外的任何内容。

喜欢 :

例如,让我们假设underscoreswhere 等于spaces

foo_bar__The_Quick_Dog__is_addicted_to___jumping___

然后replacethespaces与 any symbol,最好是 a Comma (,)

所以我们应该有:foo bar,The Quick Dog,沉迷于,跳跃。

但是,单词jumping不应该替换它的空格,comma因为它在末尾...添加 acomma将毫无意义

我试过了:

/\(\s*([^)]+?)\s*\)/

[a-z].\s{2,}.*

\s\s.*[a-z]

(?:[a-zA-Z0-9]+[ ])+[a-zA-Z0-9]+

还有几百个……还是不行。

感谢

4

2 回答 2

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."

将 multi-spaces 替换为"comma space",然后分别将"comma space new line""comma space end"替换为"full stop new line""full stop end"

于 2013-10-04T16:48:08.550 回答
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
于 2013-10-04T16:55:11.537 回答