如何排除标点符号分隔的整个句子?

时间:2019-04-01 15:30:06

标签: javascript regex

如果每行只有一个句子(我想突出显示以这些词开头并以句号结尾的句子),则此正则表达式词会很好:

(How|What|Where|Is|Are|Has|Have|Do|Does)(.*)(\.)

但是在以下行中:

What something? Is something.

整行突出显示。我只想突出显示Is something.

我尝试过:

(?![?!.])(How|What|Where|Is|Are|Has|Have|Do|Does)(.*)(\.)

但是什么也没发生。我在做什么错了?

https://regexr.com/4bdcr

3 个答案:

答案 0 :(得分:1)

也许是这个吗?

[How|Is|Where|What|Are][ \w+]*[\.|\?]

以疑问词开头,后跟空格或单词

答案 1 :(得分:0)

您可以尝试将.*替换为[^.?!]*,而在句号的任何其他结尾标点符号中,\b(?:How|What|Where|Is|Are|Has|Have|Do|Does)\b[^.?!]*\. 则不匹配:

var input = "What something? Is something.";
var regex = /\b((?:How|What|Where|Is|Are|Has|Have|Do|Does)\b[^.?!]*\.)/g;
var match = regex.exec(input);
console.log(match[1]);

Demo

下面是一个简短的JavaScript代码段,显示了实际使用的正则表达式:

var foo = "something" 
var foo = "another thing"

console.log(foo) //another thing

答案 2 :(得分:0)

您可以在此处使用否定的字符类:

/(?:How|What|Where|Is|Are|Has|Have|Do|Does)([^?.\n]*)\./g

RegEx Demo

[^?.\n]是一个否定字符类,它将与.?或换行符以外的任何字符匹配。