jquery JavaScript逐词断句

rjee0c15  于 2023-03-01  发布在  jQuery
关注(0)|答案(9)|浏览(116)

把完整的单词和它的后继字符放入一个数组的好策略是什么?
例如。
这是一个惊人的句子。

Array(
[0] => This 
[1] => is
[2] => an
[3] => amazing
[4] => sentence.
)

元素0 - 3将具有后续空格,因为句点在第4个元素之后。
我需要你把这些分隔字符,然后一旦宽度的元素与注入数组元素达到X,打破到一个新的一行。
拜托,不要给大量的代码。我更喜欢写我自己的只是告诉我你会怎么做。

kpbwa7wx

kpbwa7wx1#

Ravi's answer类似,使用match,但在正则表达式中使用单词边界\b以在单词边界上拆分:

'This is  a test.  This is only a test.'.match(/\b(\w+)\b/g)

收益率

["This", "is", "a", "test", "This", "is", "only", "a", "test"]

'This is  a test.  This is only a test.'.match(/\b(\w+\W+)/g)

收益率

["This ", "is  ", "a ", "test.  ", "This ", "is ", "only ", "a ", "test."]
d4so4syb

d4so4syb2#

只需使用split

var str = "This is an amazing sentence.";
var words = str.split(" ");
console.log(words);
//["This", "is", "an", "amazing", "sentence."]

如果你需要一个空格,为什么不直接这样做呢?(之后使用一个循环)

var str = "This is an amazing sentence.";
var words = str.split(" ");
for (var i = 0; i < words.length - 1; i++) {
    words[i] += " ";
}
console.log(words);
//["This ", "is ", "an ", "amazing ", "sentence."]
  • 睡个好觉 *
hlswsv35

hlswsv353#

试试这个

var words = str.replace(/([ .,;]+)/g,'$1§sep§').split('§sep§');

这将
1.在每个选定的分隔符[ .,;]+之后插入标记§sep§
1.在标记的位置分割字符串,从而保留实际的分隔符。

5w9g7ksd

5w9g7ksd4#

如果你需要空格和点,最简单的方法就是。

"This is an amazing sentence.".match(/.*?[\.\s]+?/g);

结果将是

['This ','is ','an ','amazing ','sentence.']
7fyelxc5

7fyelxc55#

使用splitfilter删除前导和尾随空格。

let str = '     This is an amazing sentence.  ',
  words = str.split(' ').filter(w => w !== '');

console.log(words);
33qvvth1

33qvvth16#

O(N)时间复杂度O(N)

var str = "This is an amazing sentence.";
var words = [];
var buf = "";
for(var i = 0; i < str.length; i++) {
    buf += str[i];
    if(str[i] == " ") {
        words.push(buf);
        buf = "";
    }
}

if(buf.length > 0) {
    words.push(buf);
}
xmq68pz9

xmq68pz97#

这可以通过lodash _.words来完成:

var str = 'This is an amazing sentence.';
console.log(_.words(str, /[^, ]+/g));
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
6xfqseft

6xfqseft8#

这可以通过split函数来实现:

"This is an amazing sentence.".split(' ')
hwazgwia

hwazgwia9#

下面的解决方案不仅可以用空格来拆分单词,还可以用其他类型的空格和标点符号来拆分单词。此外,它还可以使用非ASCII字符。
它通过只考虑属于某些字符类别的字符来匹配单词。它允许字母(L)、数字(N)、符号(S)和标记(M),因此它匹配的字符集相当广泛,但如果需要不同的字符集,您可以进行调整。不包括标点符号(P)和分隔符(Z)等其他类别,因此不会匹配。

input.match(/[\p{L}\p{N}\p{S}\p{M}]+/gu)

示例

' \t a 件数 😀 ,;-asd'.match(/[\p{L}\p{N}\p{S}\p{M}]+/gu)

返回['a', '件数', '😀', 'asd']

相关问题