Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将两个JavaScript正则表达式组合为一个 背景:_Javascript_Regex - Fatal编程技术网

将两个JavaScript正则表达式组合为一个 背景:

将两个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

我使用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-%!'*]+但这仍然是错误的。

试试这个:

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-%!()'*]+$