在javascript中将字符串分割成句子

2024-03-31

目前我正在开发一个将长列分成短列的应用程序。为此,我将整个文本拆分为单词,但目前我的正则表达式也拆分了数字。

我所做的是这样的:

str = "This is a long string with some numbers [125.000,55 and 140.000] and an end. This is another sentence.";
sentences = str.replace(/\.+/g,'.|').replace(/\?/g,'?|').replace(/\!/g,'!|').split("|");

结果是:

Array [
    "This is a long string with some numbers [125.",
    "000,55 and 140.",
    "000] and an end.",
    " This is another sentence."
]

期望的结果是:

Array [
    "This is a long string with some numbers [125.000, 140.000] and an end.",
    "This is another sentence"
]

我必须如何更改我的正则表达式才能实现此目的?我需要注意可能遇到的一些问题吗?或者搜索一下就足够了". ", "? " and "! "?


str.replace(/([.?!])\s*(?=[A-Z])/g, "$1|").split("|")

Output:

[ 'This is a long string with some numbers [125.000,55 and 140.000] and an end.',
  'This is another sentence.' ]

分解:

([.?!])= 捕获任一. or ? or !

\s*= 捕获前一个标记后面的 0 个或多个空白字符([.?!])。这说明了与英语语法匹配的标点符号后面的空格。

(?=[A-Z])= 仅当下一个字符在 A-Z 范围内(大写 A 到大写 Z)时,前面的标记才匹配。大多数英语句子都以大写字母开头。以前的正则表达式都没有考虑到这一点。


替换操作使用:

"$1|"

我们使用了一个“捕获组”([.?!])我们捕获其中一个字符,并将其替换为$1(比赛)加上|。所以如果我们捕获?那么替换将是?|.

最后我们把管道分开|并得到我们的结果。


所以,本质上,我们要说的是:

1)查找标点符号(其中之一. or ? or !)并捕获它们

2) 标点符号后面可以选择包含空格。

3) 标点符号之后,我希望有一个大写字母。

与之前提供的正则表达式不同,这将正确匹配英语语法。

从那里:

4)我们通过附加管道来替换捕获的标点符号|

5)我们分割管道来创建一个句子数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在javascript中将字符串分割成句子 的相关文章

随机推荐