Javascript 正则表达式字符串与管道不匹配
我有下面的正则表达式Javascript 正则表达式字符串与管道不匹配,javascript,regex,Javascript,Regex,我有下面的正则表达式 var catalogueHrefRegex = /\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/; 例如,我正在对一个url进行测试 var href = "xxx/compare/ax?model=xxx"; 我运行以下代码 catalogueHrefRegex.test(href) 我希望它返回false,但它返回true。我正试着去喜欢 /automobiles/cr/... /automobiles/ts/... /au
var catalogueHrefRegex = /\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/;
例如,我正在对一个url进行测试
var href = "xxx/compare/ax?model=xxx";
我运行以下代码
catalogueHrefRegex.test(href)
我希望它返回false,但它返回true。我正试着去喜欢
/automobiles/cr/...
/automobiles/ts/...
/automobiles/zs/...
/automobiles/ax/...
/automobiles/wx/...
我在ts末尾有美元,因为我不想与“汽车/tsx”匹配
我尝试了以下方法,但没有一种效果如预期
/\/automobiles\/((cr)|(ts$)|(zs)|(ax)|(wx))$/
/\/automobiles\/*(cr)|(ts$)|(zs)|(ax)|(wx)*$/
我对正则表达式不太在行,所以我的尝试是在谷歌搜索之后进行的。我怀疑我设置管道的方式是错误的,或者分组是错误的,因为当我尝试“cr”时,它按预期工作,但我不确定如何将cr/ts/zs/ax/wx分组,以便它显示匹配汽车/cr或ts或
对于我想要的结果,什么是正确的正则表达式?感谢您抽出时间因此有几个问题。首先,替换应用于包含它的整个组。其次,
$
匹配输入字符串的结尾(或多行模式下的行结尾)。因此,您的第一个正则表达式:
/\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/
将匹配一个literal/cr
或一个literalts
后跟字符串结尾,或一个literalzs
或一个literalax
或一个literalwx
后跟字符串结尾
我怀疑你想要这样的图案:
/\/automobiles\/(cr|ts|zs|ax|wx)\//
这将匹配一个文本/automobiles/
,后跟一个文本cr
,ts
,zs
,ax
,或wx
,后跟一个文本//code>
我删除了$
,因为在您的示例中使用了/…
,这意味着在最后的/
后面还有其他字符
您可以测试它。因此有几个问题。首先,替换应用于包含它的整个组。其次,$
匹配输入字符串的结尾(或多行模式下的行结尾)。因此,您的第一个正则表达式:
/\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/
将匹配一个literal/cr
或一个literalts
后跟字符串结尾,或一个literalzs
或一个literalax
或一个literalwx
后跟字符串结尾
我怀疑你想要这样的图案:
/\/automobiles\/(cr|ts|zs|ax|wx)\//
这将匹配一个文本/automobiles/
,后跟一个文本cr
,ts
,zs
,ax
,或wx
,后跟一个文本//code>
我删除了$
,因为在您的示例中使用了/…
,这意味着在最后的/
后面还有其他字符
你可以测试它。这个应该按照你的预期工作:/\/automobiles\/((cr)(ts$)(zs)(ax)(wx))$/
(这是你在问题中提到的第二个正则表达式)。请看。@Jerry yes它确实返回false,但是regex与automobiles不匹配/XX这一个应该按照您的预期工作:/\/automobiles\/((cr)(ts$)(zs)|(ax)|(wx))$/
(这是您在问题中提到的第二个regex)。请看。@Jerry yes它确实返回false,但是regex与automobiles/XX不匹配。关于(ts$)
,我认为OP希望匹配类似于:/automobiles/ts
,但不是:/automobiles/ts/1
。@CodingGorilla OP声明“我不想匹配‘automobiles/tsx’”,但是基于这种尝试:/\/automobiles\/*(cr)|(ts$)|(zs)|(ax)|(wx)*$/
我认为如果最后不是ts
,他希望它继续匹配(并捕获)到字符串的末尾。我想他想要的东西是:\/automobiles\/((cr | ts$| zs$| ax | wx)\/.*)$
(这没有经过测试,试图让人明白这个想法)@CodingGorilla,这可能是他的意图。这个问题并不完全清楚。我理解问题的方式(主要基于示例)是尝试只匹配URL的一部分,匹配的文本后面可能有其他字符。是的,答案完全符合我的需要。我对正则表达式不太在行,所以我的尝试可能有点误导了(ts$)
我认为OP想要匹配类似的东西:/automobiles/ts
,但不是:/automobiles/ts/1
@CodingGorilla OP声明“我不想匹配‘automobiles/tsx’”,但是基于这种尝试:/\/automobiles\/*(cr)|(ts$)|(zs)|(ax)|(wx)*$/
我认为如果最后不是ts
,他希望它继续匹配(并捕获)到字符串的末尾。我想他想要的东西是:\/automobiles\/((cr | ts$| zs$| ax | wx)\/.*)$
(这没有经过测试,试图让人明白这个想法)@CodingGorilla,这可能是他的意图。这个问题并不完全清楚。我理解问题的方式(主要基于示例)是尝试只匹配URL的一部分,匹配的文本后面可能有其他字符。是的,答案完全符合我的需要。我不擅长正则表达式,所以我的尝试可能有点误导