Javascript Regex在某些字符之间获取文本

时间:2015-06-07 14:57:24

标签: javascript regex

我需要一个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

RegExr link

这让我匹配:

vieworder/1003123464
vieworder/W411234368

但我希望包含第一个捕获组。

我知道我可以通过string.replace('vieworder/')运行结果,但只用一个命令就能做到这一点很酷。

3 个答案:

答案 0 :(得分:0)

使用不带分组 vieworder

的表达式
vieworder\/(.*?)(?=\/)

DEMO

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和一个或多个数字"。