2014-08-29 82 views
2

如何在字符串中选择一个变量?解析带正则表达式的变量字符串

我的字符串是

?aa=56345634563456&bb=16843621384 

我试图用这句话:

(\?|\&)aa=([^&]*) 

给我这样的结果:

?aa=56345634563456 

我要选择唯一的价值没有AA =,只有这个值:

56345634563456 

如何使用正则表达式选择该值?

PS:我的英语不太好,谢谢理解

+0

你想要两个变量'aa','bb'的值吗? – 2014-08-29 02:13:43

+0

您需要引用您的第二个匹配组,以仅打印匹配结果。也可以不用第一个捕获组,使用一个字符类'[?&] aa =([^&] +)',然后引用第一个组作为匹配结果。 – hwnd 2014-08-29 02:48:41

回答

1

你的正则表达式(\?|\&)aa=([^&]*)是正确的。但是您需要打印第二个捕获的组,而不是打印整个比赛。

下面的正则表达式只会匹配这些值,您不需要去捕获组。因此,当您使用下面的正则表达式时,打印整个匹配不会成为问题。

,如果你想匹配这两个变量aabb值试试下面的正则表达式,

(?<=[?&](?:aa|bb)=)[^&]* 

如果你想匹配的aa值而已,然后尝试以下,

(?<=[?&]aa=)[^&]* 

DEMO

在javascript中,

> "?aa=56345634563456&bb=16843621384".match(/[?&]aa=([^&]*)/)[1]; 
'56345634563456' 

OR

> var s = "?aa=56345634563456&bb=16843621384"; 
undefined 
> var re = /[?&]aa=([^&]*)/g; 
undefined 
> function getMatches(string, regex, index) { 
... index || (index = 1); 
... var matches = []; 
... var match; 
... while (match = regex.exec(string)) { 
..... matches.push(match[index]); 
..... } 
... return matches; 
... } 
undefined 
> var matches = getMatches(s, re, 1); 
undefined 
> matches 
[ '56345634563456' ] 
+0

(?<= [?&] aa =)[^&] *这是我想要的,它不适用于JavaScript。 PHP和Python只有 – traBolics 2014-08-29 03:42:41

+0

你想要一个JS解决方案? – 2014-08-29 03:45:00

+0

是的,我想要一个js解决方案http://regex101.com/r/sB7nQ7/2#javascript – traBolics 2014-08-29 03:55:02

0
(?<=aa=)(\d+) 

这应该这样做。

查看演示。

http://regex101.com/r/lK9iD2/8

+0

谢谢你的回答。但56345634563456号码始终不是数字。它可能是a5s5da6或-asdas-23_asda-a – traBolics 2014-08-29 03:06:21

+0

我与你的答案合并@hwnd的答案(?<= aa =)([^&] +) – traBolics 2014-08-29 03:11:26

+0

http://regex101.com/r/lK9iD2/ 1#javascript错误与js – traBolics 2014-08-29 03:24:37