javascript - 正则表达式字符串与管道不匹配

标签 javascript regex

我有以下正则表达式

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 或 ...

http://jsfiddle.net/WdXXx/

我想要的结果的正确正则表达式是什么?感谢您的宝贵时间

最佳答案

所以有几个问题。首先,交替适用于包含它的整个组。其次,$匹配输入字符串的末尾(或多行模式下的行尾)。所以你的第一个正则表达式:

/\/automobiles\/(cr)|(ts$)|(zs)|(ax)|(wx)$/ 

将匹配文字 /automobiles/cr 或文字 ts 后跟字符串末尾或文字 zs 或文字ax 或文字 wx 后跟字符串末尾。

我怀疑您想要这样的模式:

/\/automobiles\/(cr|ts|zs|ax|wx)\//

这将匹配文字 /automobiles/ 后跟文字 crtszsaxwx 后跟文字 /

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

你可以测试一下here .

关于javascript - 正则表达式字符串与管道不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18448617/

相关文章:

javascript - 为什么 Firefox、Chrome、Opera 跟不上鼠标事件?

javascript - 无法让简单的 focus() 函数工作

python - 在 Python 中获取 2 个子字符串之间的所有可能字符串

javascript - Peg.js 区分缺失值和空格

c# - 正则表达式在 C# 中匹配,但在 java 中不匹配

javascript - 用 HTML/Javascript 制作 POS 软件是否可行?

javascript - 绝对定位元素 - 需要切换可见性

java - 如何使用 REGEX 找到交替的 1 和 0

javascript - div在边距和宽度动画问题上消失 - jquery

c++ - 正则表达式/Unix 工具,用于在 C++ 文件中的每个函数定义的开头之前插入一个新行