2014-04-04 97 views
0

我有一个data.url字符串。我想从它那里得到一些数据具有以下的正则表达式JavaScript正则表达式匹配只在圆括号内

var filename = data.url.match(/file=(.+)&/gi); 

所有我想要的是括号-a文件名actually-但我找回里面的数据是“文件= example.jpg &”。 这是怎么回事?不仅应该返回括号中的匹配吗? 如何摆脱这些不必要的字符?感谢

回答

1

使用

var filename = data.url.match(/file=([^&]+)/i)[1]; 

实施例:

"file=example.jpg".match(/file=([^&]+)/i)[1] == "example.jpg" 
"file=example.jpg&b=ttt&c=42".match(/file=([^&]+)/i)[1] == "example.jpg" 
"http://example.com/index.php?file=example.jpg&b=ttt&c=42".match(/file=([^&]+)/i)[1] == "example.jpg" 

match()返回与第一组搜索在所述第二位置处,即在match(...)[1]阵列。

注意:上述代码的结果将是一个字符串。如果你仍然想要一个单一数组作为唯一的元素,那么你应该采用@Sabuj Hassan的解决方案。

+0

嗯,如果你使用'[^&] +',那么你可以安全地删除'&?'在最后。除非OP特别想要匹配,如果有'&',在这种情况下,你不应该使用'?'。 – Jerry

+0

@Jerry:谢谢!我将重写我的解决方案到更短的正则表达式... ;-) –

2

Javascript返回整个匹配模式(通常称为组0)以及其他匹配的组。你可以使用这个:

var filename = /file=(.+)&/gi.exec(data.url).slice(1);