我有以下正则表达式
var catalogueHrefRegex = /\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/;
例如,我正在针对网址进行测试
var href = "xxx/compare/ax?model=xxx";
我运行以下代码
catalogueHrefRegex.test(href)
我期望它返回 false,但它返回 true。我正在尝试像
这样的网址/automobiles/cr/...
/automobiles/ts/...
/automobiles/zs/...
/automobiles/ax/...
/automobiles/wx/...
我在 ts 末尾有 $ 因为我不想匹配 'automobiles/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)$/
将匹配文字 /automobiles/cr
或文字 ts
后跟字符串末尾或文字 zs
或文字ax
或文字 wx
后跟字符串末尾。
我怀疑您想要这样的模式:
/\/automobiles\/(cr|ts|zs|ax|wx)\//
这将匹配文字 /automobiles/
后跟文字 cr
、ts
、zs
、ax
或 wx
后跟文字 /
。
我删除了 $
因为在您的示例中您使用了 /...
,这意味着最后的 /
后面还有其他字符。
你可以测试一下here .
关于javascript - 正则表达式字符串与管道不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18448617/