使用JavaScript计算字符串中的句子数

问题描述 投票:3回答:2

已经有几个类似的问题:

我的情况有所不同。

我需要count个字符串中的句子数。

最接近我需要的答案是:

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

这里唯一的问题是此RegEx假定句子以大写字母开头,但情况并非总是如此。

更具体地说,我将句子定义为:

  • 以字母(无论是否大写),数字甚至是符号(例如$或€)开头。
  • 以标点符号结尾,例如“。”,“?”或“!”。

但是,如果一个句子包含一个数字,而该数字本身包含一个“。”或一个“,”,则该句子应被视为一个句子而不是两个句子。

最后但并非最不重要的一点,我们可以假设除了第一个句子之外,一个句子前面都有一个空格。

给出一个随机字符串,如何计算Javascript(或Cof​​feeScript)包含的句子数?

javascript regex string count coffeescript
2个回答
4
投票

一个解决您问题的正则表达式是:

\w[.?!](\s|$)

各部分如下:

\w - Word character
\[.?!] - Punctuation as specified.
(\s|$) - Whitespace character OR the end of the string.

您也许可以使用角色类而不是组:

[\s|$]

对于最后一个元素,但这不适用于https://regex101.com/

经过以下测试:

与普遍的看法相反,Lorem Ipsum不只是随机的文本。起源于公元前45年的一部古典拉丁文学作品,超过2000年old。理查德·麦克林托克(Richard McClintock),弗吉尼亚州的汉普顿-悉尼大学,抬头看的比较模糊来自Lorem Ipsum段落的拉丁词consectetur通过古典文学中的单词引用,发现了毫无疑问source。 Lorem Ipsum来自1.10.32节和西塞罗(Cicero)撰写的“ de Finibus Bonorum et Malorum”(善恶的极端)的1.10.33,写于45 BC。伦理学理论,在Renaissance。第一行期间非常流行Lorem Ipsum的文章“ Lorem ipsum dolor sit amet ..”来自于第1.10节。32。

并找到六个句子(将句子结尾加粗,而不是实际匹配)。请注意,如果出于任何原因依赖不同的分组,可能会造成问题。


0
投票

我想出了一个简单得多的解决方案。

let text = text + " ";
const count = text.split(". ").length - 1;
console.log(count);
© www.soinside.com 2019 - 2024. All rights reserved.