将字符串拆分为单词并保持分隔符

时间:2014-10-03 18:13:41

标签: javascript regex

我想在一个单词数组中分割一个字符串(句子)并保留分隔符。


我发现并且我目前正在使用此正则表达式:

[^.!?\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]);
}

代码有效,但正如我所说,包含空格和换行符

3 个答案:

答案 0 :(得分:4)

哟可以尝试更简单的事情:

str.split(/\b(?!\s)/);

但是,请注意非单词字符(例如句号)将被视为另一个单词:

"This is a sentence.".split(/\b(?!\s)/);
// [ "This ", "is ", "a ", "sentence", "." ]

要解决这个问题,你可以使用一个不应该从另一个单词开始的字符的字符类:

str.split(/\b(?![\s.])/);

答案 1 :(得分:1)

function split_string(str){    
   var arr = str.split(" ");
   var last_i = arr.length - 1;
   for(var i=0; i<last_i; i++){
       arr[i]+=" ";
   }
   return arr;
 }

答案 2 :(得分:0)

可能就是这么简单:

var sentence = 'This is a sentence.';
sentence = sentence.split(' ').join(' ||');
sentence = sentence.split('\n').join('\n||');
var matches = sentence.split('||');

请注意,我使用2个管道作为分隔符,但当然,只要它是唯一的,您就可以使用任何东西。

另请注意,我只将\ n拆分为换行符,但您可以添加\ r \ n或其他任何想要拆分的内容。