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
或一个literal
ts
后跟字符串结尾,或一个literal
zs
或一个literal
ax
或一个literal
wx
后跟字符串结尾

我怀疑你想要这样的图案:

/\/automobiles\/(cr|ts|zs|ax|wx)\//
这将匹配一个文本
/automobiles/
,后跟一个文本
cr
ts
zs
ax
,或
wx
,后跟一个文本
//code>

我删除了
$
,因为在您的示例中使用了
/…
,这意味着在最后的
/
后面还有其他字符


您可以测试它。

因此有几个问题。首先,替换应用于包含它的整个组。其次,
$
匹配输入字符串的结尾(或多行模式下的行结尾)。因此,您的第一个正则表达式:

/\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/ 
将匹配一个literal
/cr
或一个literal
ts
后跟字符串结尾,或一个literal
zs
或一个literal
ax
或一个literal
wx
后跟字符串结尾

我怀疑你想要这样的图案:

/\/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的一部分,匹配的文本后面可能有其他字符。是的,答案完全符合我的需要。我不擅长正则表达式,所以我的尝试可能有点误导