正则表达式不包含单词

时间:2016-06-23 16:32:34

标签: javascript regex

大家好我是regex的新手:

我有一个字符串等等被视为句子的结尾,我怎样才能在现有的正则表达式中将其视为句末。

sentence: 'hello how are you, can you pass me pen, book etc. I am going to travel abroad. I am going on vacation. Let me know if anything needs to be done in something.com.'; 
regex: (/(.*?(?:\.|\?|!))(?: |$)/g);

当前输出:

  • [“你好,你好吗,你可以把笔,书等传给我吗?”,“我要去 出国旅游。 “,”我要去度假。 “, “如果.......请告知我们 任何事情都需要在something.com中完成。“]

预期产出:

  • [“你好,你好吗,你可以把笔,书等传给我。我要去 出国旅行。 “,”我要去度假。 “, “如果.......请告知我们 任何事情都需要在something.com中完成。“]

JSfiddle

3 个答案:

答案 0 :(得分:1)

在示例中,它非常困难,因为它将是句子的有效结尾。下一封信是大写字母。

展望未来,不仅仅是为了行尾,而且如果下一个字母是大写字母,那么大多数情况都会出现:

var sentences = stringSentence.match(/(.*?(?:[.?!])\s*)(?=([A-Z])|$)/g);

但是在这个例子中,由于我是一个大写字母,它仍然会破裂。但是如果用逗号和/或单词作为'因为'在等等之后添加,匹配将起作用(并且在语法上更正确)

如果这还不够,可以添加一些表示缩写的例外情况。问题是,这个缩写实际上可能在一个句子的末尾...... 例如,I am going on vacation to relax etc.应匹配。

答案 1 :(得分:0)

最简单的方法是使用..或......之后等等。但是,如果你不能这样做,我会为它做一个特定的匹配案例,因为它确实是一个特定的案件。试着看看这些:

http://regexone.com/lesson/matching_characters(看看解决方案以获得一个想法)

一种可能的解决方案是:

(?<![\w\d])etc(?![\w\d])

这会匹配等但周围没有单词,只有句号。它仍然会接受.etc我相信如果这是一个问题。

答案 2 :(得分:0)

这将做你想要的:

([a-zA-Z0-9\ \,]+(?!\ etc)\.)/g

请注意,您说不匹配&#34;等等#34;。在这个正则表达式中,域名将被拆分,因为在某些东西和com之间有一个点。