将两个JavaScript正则表达式组合为一个 背景:
我使用director.js来匹配路由,并对不同的参数使用regex 问题: 需要拿出一个参数的正则表达式来匹配正则表达式1,而不匹配正则表达式2我知道这是一个糟糕的设计,但有各种原因,我必须这样做 [.\U a-zA-Z0-9-%!\\'*]+ [a-z0-9][a-zA-z0-9]{3}0[a-zA-z0-9]{2}|[a-zA-z0-9]00[a-zA-z0-9]{8}[a-zA-z0-9]{3}? 最好的方法是什么 更新: 多亏了gyre。我觉得有点像?![a-zA-z0-9][a-zA-z0-9]{3}0[a-zA-z0-9]{2}|[a-zA-z0-9]00[a-zA-z0-9]{8}[a-zA-z0-9]{3}:[.[U-a-zA-z0-z0-9-%!'*]+是我想要的,但在我的应用程序中尝试使用此正则表达式时,它仍然可以找到字符串BXX0000025UEA的匹配项,我认为该库有点混淆。是否需要更新正则表达式以根本找不到00Bxx0000025e1UEA的匹配项 我已尝试为正则表达式添加^和$: ?!^[a-zA-z0-9][a-zA-z0-9]{3}0[a-zA-z0-9]{2}|[a-zA-z0-9]00[a-zA-z0-9]{8}[a-zA-z0-9]{3}元:[.[U-a-zA-z0-9-%!'*]+但这仍然是错误的。试试这个:将两个JavaScript正则表达式组合为一个 背景:,javascript,regex,Javascript,Regex,我使用director.js来匹配路由,并对不同的参数使用regex 问题: 需要拿出一个参数的正则表达式来匹配正则表达式1,而不匹配正则表达式2我知道这是一个糟糕的设计,但有各种原因,我必须这样做 [.\U a-zA-Z0-9-%!\\'*]+ [a-z0-9][a-zA-z0-9]{3}0[a-zA-z0-9]{2}|[a-zA-z0-9]00[a-zA-z0-9]{8}[a-zA-z0-9]{3}? 最好的方法是什么 更新: 多亏了gyre。我觉得有点像?![a-zA-z0-9][a-zA
var str = "the string to test"
var re1 = "your first regex, [._a-zA-Z0-9-%!()'*]+"
var re2 = "your second regex, [a-z0-9][a-zA-Z0-9]{3}(0[a-zA-Z0-9]{2}|[a-zA-Z0-9]00)[a-zA-Z0-9]{8}([a-zA-Z0-9]{3})?"
if(str.search(re1) != -1 && str.search(r2) == -1) {
// your action
}
如果没有匹配项,将返回-1如果需要匹配regex1而不匹配regex2,那么为什么不能检查为
var isTrue = regex1.test(str) && !regex2.test(str)
您实际上是在寻找此模式,它使用负前瞻来确保的匹配也不是以下的匹配:
您可以在一个正则表达式中这样做:
^(?![a-z0-9][a-zA-Z0-9]{3}(0[a-zA-Z0-9]{2}|[a-zA-Z0-9]00)[a-zA-Z0-9]{8}([a-zA-Z0-9]{3})?$)[._a-zA-Z0-9-%!()'*]+$
你想拒绝的部分首先出现在两个之间,这意味着它会向前看,如果该部件匹配,它将失败
额外的“^”和“$”将确保匹配在字符串的开头完成,直到该字符串的末尾
您希望匹配的模式放在末尾,另外加上$以防止其他字符跟随该模式
在电视上看
根据您的期望,您可能希望删除第一个$。如果您还想使具有排除模式且后面有其他字符的字符串失败,请将其删除。但是,如果这样的后缀字符使字符串可能可以接受,那么您应该保留美元。这怎么办?这将排除以第二个模式开始的字符串,但之后会有一些内容。如果这是不需要的,那么。^?![a-zA-z0-9][a-zA-z0-9]{3}0[a-zA-z0-9]{2}|[a-zA-z0-9]00[a-zA-z0-9]{8}[a-zA-z0-9]{3}吗?[.(a-zA-z0-9-%!'*]+这个?无法使用此字符串00BXX0000025GVEAIDDFDAFDSFFYES,我添加了一个链接。如果排除不能像排除一样工作,如果其他东西遵循该模式,那么在排除模式的末尾也包括$thx,我想我在最初的帖子中没有说得足够清楚,我需要一个正则表达式来解决这个问题。
^(?![a-z0-9][a-zA-Z0-9]{3}(0[a-zA-Z0-9]{2}|[a-zA-Z0-9]00)[a-zA-Z0-9]{8}([a-zA-Z0-9]{3})?$)[._a-zA-Z0-9-%!()'*]+$