我需要一个Javascript中的正则表达式,这样我就可以使用两种不同格式的订单网址来匹配订单号:
网址:
http://store.apple.com/vieworder/1003123464/test@test.com
http://store.apple.com/vieworder/W411234368/test@test.com/AOS-A=
M-104121
第一个将始终所有数字,第二个将始终以W开头,后跟数字。
我需要能够使用单个正则表达式返回这些匹配项:
1003123464
W411234368
这是我到目前为止所尝试的:
/(vieworder\/)(.*?)(?=\/)/g
这让我匹配:
vieworder/1003123464
vieworder/W411234368
但我希望不包含第一个捕获组。
我知道我可以通过string.replace('vieworder/')
运行结果,但只用一个命令就能做到这一点很酷。
答案 0 :(得分:0)
使用不带分组 vieworder
vieworder\/(.*?)(?=\/)
var string = 'http://store.apple.com/vieworder/1003123464/test@test.com http://store.apple.com/vieworder/W411234368/test@test.com/AOS-A=M-104121';
var myRegEx = /vieworder\/(.*?)(?=\/)/g;
var index = 1;
var matches = [];
var match;
while (match = myRegEx.exec(string)) {
matches.push(match[index]);
}
console.log(matches);
答案 1 :(得分:0)
使用replace
代替匹配,因为js不支持lookbehinds。您可以使用捕获组和exec
方法打印特定组内的字符。
> var s1 = 'http://store.apple.com/vieworder/1003123464/test@test.com'
undefined
> var s2 = 'http://store.apple.com/vieworder/W411234368/test@test.com/AOS-A='
undefined
> s1.replace(/^.*?vieworder\/|\/.*/g, '')
'1003123464'
> s2.replace(/^.*?vieworder\/|\/.*/g, '')
'W411234368'
或强>
> s1.replace(/^.*?\bvieworder\/([^\/]*)\/.*/g, '$1')
'1003123464'
答案 2 :(得分:0)
我建议
W?\d+
应该转换为"一个或零个W和一个或多个数字"。