Javascript匹配一个正则表达式,但不匹配另一个正则表达式

Javascript匹配一个正则表达式,但不匹配另一个正则表达式,javascript,regex,Javascript,Regex,如何查找字符串中所有 匹配一个表达式: /[a-zA-Z]{4,}/ 但不要与另一个匹配: /\b[a-zA-Z]([a-zA-Z])\1+[a-zA-Z]\b/ 类似于伪代码: string.match( (first_expression) && ( ! second_expression) ) 你可以这样做: string.match(/[a-zA-Z]{4,}/) && !string.match(/\b[a-zA-Z]([a-zA-Z])\1+[a

如何查找字符串中所有
匹配一个表达式:

/[a-zA-Z]{4,}/
但不要与另一个匹配:

/\b[a-zA-Z]([a-zA-Z])\1+[a-zA-Z]\b/
类似于伪代码:

string.match( (first_expression) && ( ! second_expression) )

你可以这样做:

string.match(/[a-zA-Z]{4,}/) && !string.match(/\b[a-zA-Z]([a-zA-Z])\1+[a-zA-Z]\b/)
但是如果您想组合这些模式,可以使用(
(?!…)
),如下所示:

string.match(/^(?!.*\b[a-zA-Z]([a-zA-Z])\1+[a-zA-Z]\b).*[a-zA-Z]{4,}.*$/)
但如果找到第二种模式,则会拒绝整个字符串,例如,
“fooz barz”
将返回
null

要确保找到的单词与其他模式不匹配,请尝试以下操作:

string.match(/\b(?![a-zA-Z]([a-zA-Z])\1+[a-zA-Z]\b)[a-zA-Z]{4,}\b/)
在这种情况下,
“foozbarz”
将返回
“barz”

请注意,可以使用不区分大小写的标志(
i
)稍微清理一下:


这应该符合你想要的,而不是你不想要的。

这比我的解决方案更优雅。如果你只是在检查有效性,我会使用
测试。
。是的,最后一个就可以了!我这边有个小补丁,我把[A-z]改成了[A-Za-z]。大THX!不要像在第一个表达式中那样使用
[A-z]
,而是使用
[A-zA-z]
[A-z]
将不仅仅匹配字母。我相信
\w
在这种情况下也能工作
\w
匹配
[A-zA-z\ud]
好的。你是对的F.J,修复了这个问题
string.match(/\b(?![a-z]([a-z])\1+[a-z]\b)[a-z]{4,}\b/i)
if(string.match(first_expression))
{
    if(!string.match(second_expression))
    {
        //Do something important
    }
}