如何找到字符串中的所有单词 匹配一个表达式:
/[a-zA-Z]{4,}/
但与另一个不匹配:
/\b[a-zA-Z]([a-zA-Z])\1+[a-zA-Z]\b/
类似伪代码的东西:
string.match( (first_expression) && ( ! second_expression) )
答案 0 :(得分:3)
你可以这样做:
string.match(/[a-zA-Z]{4,}/) && !string.match(/\b[a-zA-Z]([a-zA-Z])\1+[a-zA-Z]\b/)
但是如果你想组合模式,你可以使用negative lookahead((?!...)
),如下所示:
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/)
在这种情况下,"fooz barz"
将返回"barz"
。
请注意,使用不区分大小写的标记(i
)可以稍微清除它:
string.match(/\b(?![a-z]([a-z])\1+[a-z]\b)[a-z]{4,}\b/i)
答案 1 :(得分:1)
if(string.match(first_expression))
{
if(!string.match(second_expression))
{
//Do something important
}
}
这应该符合您的要求而不是您想要的。