3

如何在字符串中找到
与一个表达式匹配的所有单词:

/[a-zA-Z]{4,}/

但不匹配另一个:

/\b[a-zA-Z]([a-zA-Z])\1+[a-zA-Z]\b/

类似伪代码的东西:

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

2 回答 2

3

你可以这样做:

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"将 return null

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

string.match(/\b(?![a-zA-Z]([a-zA-Z])\1+[a-zA-Z]\b)[a-zA-Z]{4,}\b/)

在这种情况下,"fooz barz"将返回"barz".

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

string.match(/\b(?![a-z]([a-z])\1+[a-z]\b)[a-z]{4,}\b/i)
于 2013-09-19T22:31:17.670 回答
1
if(string.match(first_expression))
{
    if(!string.match(second_expression))
    {
        //Do something important
    }
}

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

于 2013-09-19T22:31:27.187 回答