【发布时间】:2014-11-28 20:03:41
【问题描述】:
我想将一个字符串(句子)拆分成一个单词数组并保留分隔符。
我已经找到并且我目前正在为此使用这个正则表达式:
[^.!?\s][^.!?]*(?:[.!?](?!['"]?\s|$)[^.!?]*)*[.!?]?['"]?(?=\s|$)
可以在这里找到解释:http://regex101.com/
这完全按照我的意愿工作,并且有效地制作了一个类似
的字符串This is a sentence.
到一个数组
["This", "is", "a", "sentence."]
这里的问题是它不包含空格或换行符。我希望字符串被解析为单词,但我也希望 对应的空格和/或换行符属于前一个单词。
我已经阅读了正向前瞻,它应该寻找未来的字符(空格和/或换行符),但在提取单词时仍将它们考虑在内。虽然这可能是我未能实施的解决方案。
如果有什么不同,我正在使用 JavaScript 和以下代码:
//save the regex -- g modifier to get all matches
var reg = /[^.!?\s][^.!?]*(?:[.!?](?!['"]?\s|$)[^.!?]*)*[.!?]?['"]?(?=\s|$)/g;
//define variable for holding matches
var matches;
//loop through each match
while(matches = reg.exec(STRING_HERE)){
//the word without spaces or newlines
console.log(matches[0]);
}
代码有效,但正如我所说,它不包含空格和换行符。
【问题讨论】:
-
提供一个例子来复制这个
The problem here is that it does not include spaces nor newlines.问题。 -
抛弃丑陋的正则表达式,使用拆分,并手动添加换行符:
"This is a sentence".split(" ").map(function(word){ return word+" "; }) -
@PSkocik - 这也会在最后一个单词之后添加空格,这原本不存在。
-
@Chris 从最后一个中删除它并不难。我的观点是,我认为这不是正则表达式的好用处。
-
我同意@PSkocik。这正是我在写答案时的想法。有时简单的工具就能完成工作。
标签: javascript regex