[英]Trouble splitting a string in JavaScript using regular expressions
[英]Splitting string into array of words using Regular Expressions
我正在尝试将一个字符串拆分成一个单词数组,但是我想在每个单词后面保留空格。 这是我正在尝试的:
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 "
我究竟做错了什么?
考虑:
var results = test.match(/\S+\s*/g);
这样可以保证你不会错过任何字符(除了开头的几个空格,但\\S*\\s*
可以处理)
你原来的正则表达式是:
[az]+
- 匹配任意数量的字母(至少一个) [$\\s+]
- 多个字符 - $
, +
或空格。 在此组之后没有量词,您只匹配一个空格。 请尝试以下方法:
test.match(/\w+\s+/g); // \w = words, \s = white spaces
你在char类中使用+
。 尝试在char类之外使用*
。
/[a-z]+\s*/gi;
char类中的+
被视为文字+
而不是元字符。 使用*
将捕获零个或多个可能跟随任何单词的空格。
+
字面意思在字符类中。 你必须将它移到外面: [\\s]+
或只是\\s+
( $
在类中没有意义)。
您需要更改的RegEx的基本位是与空白或行尾匹配的部分。
尝试:
var re = /[a-z]+($|\s+)/gi
或者,对于非捕获组 (我不知道你是否需要使用/g
标志):
var re = /[a-z]+(?:$|\s+)/gi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.