嗨,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.分别匹配ANSWER
和ME
(请参见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