正则表达式匹配在@符号之前没有一些单词的字符串
Regex to match a string which does NOT have some words before @ symbol
如果字符串中的字符 @ 之前存在某些单词,我想丢弃该字符串。
示例:
我希望单词 foo
和 bar
应该 NOT 出现在@符号之前的字符串中,但在@符号之后允许使用相同的单词。
我不想要这些:
abcfoo
xyz@domain.com
bar
abc@domain.com
bar
abc@domainfoo
.com
我想要这些:
abcxyz@domainfoo
.com
pqrabc@domainbar
.com
pqrabc@domain.com
我有正则表达式 ^((?!(foo|bar)).)*$
,但它也会丢弃在 @ 符号之后具有 foo
和 bar
的字符串,即使在 @.
之前不存在单词也是如此
我只希望它在字符串中 @ 符号之前出现 foo
或 bar
时丢弃。
你知道我该怎么做吗?
谢谢。
您需要在 @
之前的每个字符位置断言它不是 foo
或 bar
的开头:
^((?!foo|bar).)+@.*$
你可以试试这个:
^(?!.*(?:foo|bar).*@).*?@.*$
解释:
一个简单且单一的否定前瞻,以确保 foo 或 bar 在 @ 之前不存在。因为它是单向预测所以它运行得更快。
示例来源:
const regex = /^(?!.*(?:foo|bar).*@).*?@.*$/gm;
const str = `I do NOT want these:
abcfooxyz@domain.com
barabc@domain.com
barabc@domainfoo.com
I want these:
abcxyz@domainfoo.com
pqrabc@domainbar.com
pqrabc@domain.com`;
let m;
while ((m = regex.exec(str)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match, groupIndex) => {
console.log(`${match}`);
});
}
如果字符串中的字符 @ 之前存在某些单词,我想丢弃该字符串。
示例:
我希望单词 foo
和 bar
应该 NOT 出现在@符号之前的字符串中,但在@符号之后允许使用相同的单词。
我不想要这些:
abcfoo
xyz@domain.com
bar
abc@domain.com
bar
abc@domainfoo
.com
我想要这些:
abcxyz@domainfoo
.com
pqrabc@domainbar
.com
pqrabc@domain.com
我有正则表达式 ^((?!(foo|bar)).)*$
,但它也会丢弃在 @ 符号之后具有 foo
和 bar
的字符串,即使在 @.
我只希望它在字符串中 @ 符号之前出现 foo
或 bar
时丢弃。
你知道我该怎么做吗? 谢谢。
您需要在 @
之前的每个字符位置断言它不是 foo
或 bar
的开头:
^((?!foo|bar).)+@.*$
你可以试试这个:
^(?!.*(?:foo|bar).*@).*?@.*$
解释: 一个简单且单一的否定前瞻,以确保 foo 或 bar 在 @ 之前不存在。因为它是单向预测所以它运行得更快。
示例来源:
const regex = /^(?!.*(?:foo|bar).*@).*?@.*$/gm;
const str = `I do NOT want these:
abcfooxyz@domain.com
barabc@domain.com
barabc@domainfoo.com
I want these:
abcxyz@domainfoo.com
pqrabc@domainbar.com
pqrabc@domain.com`;
let m;
while ((m = regex.exec(str)) !== null) {
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
m.forEach((match, groupIndex) => {
console.log(`${match}`);
});
}