我试图改变这一点:
"This is a test this is a test"
进入这个:
["This is a", "test this is", "a test"]
我试过了:
const re = /\b[\w']+(?:[^\w\n]+[\w']+){0,2}\b/
const wordList = sample.split(re)
console.log(wordList)
但我得到了这个:
[ '',
' ',
' ']
为什么会这样?
(规则是每N个字分割字符串。)
答案 0 :(得分:9)
String#split
方法会根据匹配的内容拆分字符串,因此不会在结果数组中包含匹配的字符串。
使用String#match
方法在正则表达式上使用全局标记(''.join(list)
):
g

答案 1 :(得分:4)
你的代码很好用。但不是分裂。拆分将其视为一个分隔符。 比如这样的东西:
var arr = "1, 1, 1, 1";
arr.split(',') === [1, 1, 1, 1] ;
//but
arr.split(1) === [', ', ', ', ', ', ', '];
而是使用match
或exec
。像这样
var x = "This is a test this is a test";
var re = /\b[\w']+(?:[^\w\n]+[\w']+){0,2}\b/g
var y = x.match(re);
console.log(y);
答案 2 :(得分:3)
作为替代方法,您可以按空格分割字符串,并批量分割合并块。
function splitByWordCount(str, count) {
var arr = str.split(' ')
var r = [];
while (arr.length) {
r.push(arr.splice(0, count).join(' '))
}
return r;
}
var a = "This is a test this is a test";
console.log(splitByWordCount(a, 3))
console.log(splitByWordCount(a, 2))
答案 3 :(得分:1)
使用空格特殊字符(\s
)和match
函数代替split
:
var wordList = sample.text().match(/\s?(?:\w+\s?){1,3}/g);
拆分符合正则表达式匹配的字符串。匹配返回匹配的任何内容。
选中fiddle。
答案 4 :(得分:1)
你可以这样分开:
var str = 'This is a test this is a test';
var wrd = str.split(/((?:\w+\s+){1,3})/);
console.log(wrd);

但是,您必须从数组中删除空元素。