嗨,Stack Overflow,

I have this three regexp:
var regex = new RegExp(/[A-Z]+/g); // This is to select only word with CAPS
var regexOk = new RegExp(/[^OK]+/g); // This is to select anything beside OK
var regexDmv = new RegExp(/[^DMV]+/g); // This is to select anything beside DMV

// And a variable:
var string = "Let's go to the DMV tomorrow, is that OK? ANSWER ME!";


基本上我想做的就是搜索这个字符串,以便它返回
['回答我']

谁能给我建议?

最佳答案

A.分别匹配ANSWERME(请参见demo

\b(?!DMV|OK)[A-Z]+\b


这与(?!DMV|OK)\b[A-Z]+\b相同(可以在负前瞻之前或之后放置开口边界\b)。

使用Javascript:

var regex = /\b(?!DMV|OK)[A-Z]+\b/;
var match = regex.exec(string);
if (match != null) {
    result = match[0];
}


怎么运行的


[A-Z]+匹配大写单词
大写字母两侧的边界\b确保我们有一个完整的单词,而另一个单词中没有嵌入某些字母
单词前的否定前瞻(?!DMV|OK)确保我们匹配的单词既不是OK也不是DMV


B.将ANSWER ME匹配在一起(请参见demo

(?:\b(?!DMV|OK)[A-Z]+\b\s*)+


同样,如果您喜欢在\b之前将其移至[A-Z]+

在JavaScript中:

var regex = /(?:\b(?!DMV|OK)[A-Z]+\b\s*)+/;
var match = regex.exec(string);
if (match != null) {
    result = match[0];
}


怎么运行的


(?:...)+非捕获组匹配一个或多个大写单词[A-Z]+,后跟可选的空白字符\s*
大写字母两侧的边界\b确保我们有一个完整的单词,而另一个单词中没有嵌入某些字母
每个单词之前的否定前瞻(?!DMV|OK)确保我们匹配的单词既不是OK也不是DMV

09-08 11:29