2016-06-23 81 views
0

大家好我是新来的正则表达式:正则表达式排除的话

我有一个字符串等被认为是句子的末尾,我怎样才能使等不得被视为在现有的正则表达式语句的结束。

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

回答

1

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

展望看,不仅为行的末尾,也如果下一个字母是大写字母会赶上大部分情况下:

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

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

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

+0

这是我正在寻找的笏,谢谢! – user2936008

0

最简单的方法是使用..或...等等之后然而,如果你不能这样做,我会去了解它做一个具体的匹配情况下等,因为这的确是一个特定的情况下,尝试寻找这些:

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

一种可能的解决方案是:

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

这将匹配等,但没有围绕它的话,只有句点。它仍然会接受。但我相信,如果这是一个问题。

+0

我该如何在正则表达式中完成这项工作,我已将Jsfiddle添加到票证中。 – user2936008

+0

我能想到的唯一方法是使用两个正则表达式。使用你的第一个,然后添加一个if语句与第二个正则表达式。如果它返回一个匹配,那么你重新连接等字符串部分和下面的字符串部分。 – hawkeye315

0

这会做你想要什么:

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

注意你说的不匹配“等”字。在这个正则表达式中,域名将被分割为东西和com之间的一个点。