使用正则表达式将字符串拆分为单词数组

时间:2010-08-23 14:31:35

标签: javascript regex

我正在尝试将一个字符串拆分成一个单词数组,但是我想在每个单词后面保留空格。这是我正在尝试的:

var re = /[a-z]+[$\s+]/gi;
var test = "test   one two     three   four ";
var results = test.match(re);

我期望的结果是:

[0]: "test   "
[1]: "one "
[2]: "two     "
[3]: "three   "
[4]: "four "

但是,每个单词后最多只匹配一个空格:

[0]: "test "
[1]: "one "
[2]: "two "
[3]: "three "
[4]: "four "

我做错了什么?

5 个答案:

答案 0 :(得分:9)

考虑:

var results = test.match(/\S+\s*/g);

这样可以保证你不会错过任何字符(除了开头的几个空格,但是\S*\s*可以照顾它)

你原来的正则表达式是:

  • [a-z]+ - 匹配任意数量的字母(至少一个)
  • [$\s+] - 多个字符 - $+或空格。在此组之后没有量词,您只匹配一个空格。

答案 1 :(得分:2)

尝试以下方法:

test.match(/\w+\s+/g); // \w = words, \s = white spaces

答案 2 :(得分:1)

您在char类中使用+。请尝试在char类之外使用*

/[a-z]+\s*/gi;
char类中的

+被视为文字+,而不是元字符。 使用*将捕获可能跟随任何单词的零个或多个空格。

答案 3 :(得分:0)

+字面意思在字符类中。你必须把它移到外面:[\s]+或只是\s+$在课堂上没有意义。)

答案 4 :(得分:0)

您需要更改的RegEx的基本位是与空白或行尾匹配的部分。

尝试:

var re = /[a-z]+($|\s+)/gi

或者,对于non-capturing groups(我不知道你是否需要/g标志):

var re = /[a-z]+(?:$|\s+)/gi