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

时间:2016-02-05 02:32:24

标签: javascript regex string count coffeescript

已经有几个类似的问题:

我的情况有点不同。

我需要计算字符串中的句子数。

我最需要的答案是:

eventbrite

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

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

  • 以字母(大写与否),数字或符号(例如$或€)开头。
  • 以标点符号结尾,例如" 。 "," ? "或者" ! "

但是,如果一个句子包含一个数字,它本身包含一个" 。 "或者" ,",那么句子应该被视为一个句子,而不是两个。

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

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

3 个答案:

答案 0 :(得分: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,拉丁教授   在弗吉尼亚州的汉普登 - 悉尼学院,查找了一个比较模糊的人   拉丁语单词,consectetur,来自Lorem Ipsum段落,然后去   通过古典文学中的词汇,发现了   无可争议的来源。 Lorem Ipsum来自1.10.32和   " de Finibus Bonorum et Malorum"西塞罗所写的(善与恶的极端),写于公元前45年。这本书是关于   道德理论,在文艺复兴时期非常流行。第一行   Lorem Ipsum," Lorem ipsum dolor sit amet ..",来自一条线   第1.10节。 32。

找到六个句子(粗体结尾的句子,而不是实际的匹配)。请注意,如果您因任何原因依赖它,则不同的分组可能会出现问题。

答案 1 :(得分:0)

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

let text = text + " ";
const count = text.split(". ").length - 1;
console.log(count);

答案 2 :(得分:0)

如果字符串中句子的结尾处有一个字符,则此方法有效。

const text = ""; //insert your string here
const re = /[.!?]/;
const numOfSentences = text.split(re);
console.log(numOfSentences.length - 1);