如何拆分正则表达式空格和标点符号匹配,但在结果数组中保留标点符号?

时间:2015-09-16 23:07:47

标签: javascript regex

我想用正则表达式匹配空格,逗号,问号和感叹号来拆分字符串。但是我想在结果数组中包含匹配的标点符号(空格应该被丢弃。)例如:

  

正则表达式让我很恼火,我无法接受它!

上面的字符串应该split()到:

  

[" Regex","烦恼","我",",","我", "不能","采取","它","!"]

我现在只用空格和逗号开始轻松;我有以下代码:

inputStr.split(/\s|(,)/);

不幸的是,它给了我未定义的项目 - 我做错了。我花了几个小时研究(像往常一样)并且空洞。我读到了关于" lookahead"但也无法弄清楚。任何正则表达的大师能帮我一把吗?

3 个答案:

答案 0 :(得分:3)

尝试将String.prototype.match()RegExp /(\w+'\w+)|\w+|,|\!/g

一起使用
  • (\w+'\w+)匹配\w+'\w+并记住匹配。这些被称为捕获组。 \w+'\w+匹配基本拉丁字母表中的任何字母数字字符,包括下划线。相当于[A-Za-z0-9_],后跟匹配撇号,后跟匹配的字母数字字符。 +与前一项\w匹配1次或更多次。相当于{1,}。
  • \w+匹配基本拉丁字母中的任何字母数字字符,包括下划线。
  • ,匹配逗号
  • \!匹配感叹号

请参阅RegExp



var str = "Regex irritates me, I can't take it!";
var res = str.match(/(\w+'\w+)|\w+|,|\!/g);
console.log(res)




答案 1 :(得分:0)

这应该有效

String pat ="正则表达式让我感到恼火,我无法接受它!"

pat.split(" \ S&#34);

答案 2 :(得分:0)

正则表达式字符串是([\ w'!,] *)\ S

说明:

  • ()捕获群组。
  • [\ w'! ] *捕获任何单词字符,撇号或感叹号
  • \ S不会占用空间。

在regexpal.com中试用