我想匹配具有以下形式的 URL 的某些部分:http://example.com/somepath/this-is-composed-of-hypens-3144/someotherpath更准确地说,我只想匹配由所有连字符组成并以数字结尾的部分。所以,我想提取this-is-composed-of-hypens-3144上述 URL 中的部分。我有这样的事情:const re = /[a-z]*-[a-z]*-[0-9]*/gis;const match = re.exec(url);return (match && match.length) ? match[0] : null;但是,这仅在有 2 个连字符时才有效,但是,在我的情况下,连字符的数量可以是任意的。如何使我的正则表达式适用于任意数量的连字符?
1 回答
![?](http://img1.sycdn.imooc.com/533e4cde000148e602000200-100-100.jpg)
人到中年有点甜
TA贡献1895条经验 获得超7个赞
您可以使用
/\/([a-z]+(?:-[a-z]+)*-[0-9]+)(?:\/|$)/i
查看正则表达式演示
细节
\/
- 一个/
字符([a-z]+(?:-[a-z]*)*-[0-9]+)
- 捕获组 1:[a-z]+
- 1+ 个 ASCII 字母(?:-[a-z]+)*
- 0+ 次出现-
后跟 1+ ASCII 字母(?:\/|$)
-/
或字符串结尾。
如果可以有任何字符字符,而不仅仅是 ASCII 字母,您可以将每个字符替换[a-z]
为\w
.
var s = "http://example.com/somepath/this-is-composed-of-hypens-3144/someotherpath";
var m = s.match(/\/([a-z]+(?:-[a-z]+)*-[0-9]+)(?:\/|$)/i);
if (m) {
console.log(m[1]);
}
添加回答
举报
0/150
提交
取消