Javascript 在最多X个字后拆分文本
我努力想找到解决问题的办法,尽管能和大家分享会很好。问题是: 我有一个文本,它可能包括任何类型的标点符号。我想把它分成两部分:Javascript 在最多X个字后拆分文本,javascript,regex,Javascript,Regex,我努力想找到解决问题的办法,尽管能和大家分享会很好。问题是: 我有一个文本,它可能包括任何类型的标点符号。我想把它分成两部分: 最多X个字 包括附加在最后一个单词上的点状标记,如点或逗号 课文的结尾 从两部分之间的间距开始 以下是一些例子: str = "one two, three, quatro 5! : six sept ocho nine 10!" splitAfterXWords(str, 2) // ["one two,", "three, quatro 5! : six
- 包括附加在最后一个单词上的点状标记,如点或逗号
- 从两部分之间的间距开始
str = "one two, three, quatro 5! : six sept ocho nine 10!"
splitAfterXWords(str, 2)
// ["one two,", "three, quatro 5! : six sept ocho nine 10!"]
splitAfterXWords(str, 5)
// ["one two, three, quatro 5!", " : six sept ocho nine 10!"]
splitAfterXWords(str, 20)
// ["one two, three, quatro 5! : six sept ocho nine 10!", ""]
splitAfterXWords(str, 6)
// ["one two, three, quatro 5! : six", " sept ocho nine 10!"]
下面是一个执行此操作的函数:
function splitAfterXWords(to_split, words){
regex = new RegExp("(([\\s;:!,.?\"'’]*[^\\s]+){" + words + "})(.*)")
result = regex.exec(to_split)
return result ? [result[1], to_split.substr(result[1].length)] : [to_split, '']
}
你可以看到它正在工作
欢迎改进和评论 以下是我从给定句子中获取
n
单词的尝试:
var regexp = /\s*\S+\/;
function truncateToNWords(s, n) {
var l=0;
if (s == null || n<= 0) return l;
for (var i=0; i<n && (match = regexp.exec(s)) != null; i++) {
s = s.substring(match[0].length);
l += match[0].length;
}
return l;
}
// your sentence
var s = "one two, three, quatro 5!: six sept ocho nine 10!";
l = truncateToNWords(s, 2);
console.log([s.substring(0, l), s.substring(l)]);
l = truncateToNWords(s, 5);
console.log([s.substring(0, l), s.substring(l)]);
l = truncateToNWords(s, 6);
console.log([s.substring(0, l), s.substring(l)]);
l = truncateToNWords(s, 20);
console.log([s.substring(0, l), s.substring(l)]);
您是否考虑过使用
\b
来检测单词边界而不是标点符号的白名单?我想了一下,但没有想到在这种情况下如何使用它。你知道吗?我最近不得不修改代码。这根本不具有伸缩性。在20个单词后拆分就像一个charme,但令人惊讶的是,100个单词会使当前选项卡崩溃。我不知道为什么。不错,只是输出有一点不同。第一部分包含最后一个单词后面的空格:一两,
应该是没有空格的一两,
。我想您可以切换regexp的两个术语:/\s*\s+/
["one two,", " three, quatro 5!: six sept ocho nine 10!"]
["one two, three, quatro 5!:", " six sept ocho nine 10!"]
["one two, three, quatro 5!: six", " sept ocho nine 10!"]
["one two, three, quatro 5!: six sept ocho nine 10!", ""]