如何在javascript中使用正则表达式捕获两个段之间的所有内容

时间:2014-05-14 00:35:27

标签: regex

拿这个网址

http://service.com/room/dothings?adsf=asdf&dafadsf=dfasdf
http://service.com/room/saythings?adsf=asdf&dafadsf=dfasdf

说我是否要捕获dothingssaythings, 我现在是以下正则表达式

/room\/(.+)\?/.exec(url)

在结果中我得到了这个。

["room/dothings?", "dothings"]

我应该写什么来获取上面的字符串,只有一个数组中的项目。

2 个答案:

答案 0 :(得分:1)

我知道这并没有回答你的问题,但使用正则表达式解析网址并不容易,在某些情况下甚至不安全。我会在没有正则表达式的情况下进行解析。

在浏览器中:

var parser = document.createElement('a');
parser.href = 'http://example.com/room/dothings?adsf=asdf&dafadsf=dfasdf';

在node.js中:

var url = require('url');
var parser = url.parse('http://example.com/room/dothings?adsf=asdf&dafadsf=dfasdf');

然后在两种情况下:

console.log(parser.pathname.split('/')[2]);

答案 1 :(得分:1)

这实际上很容易。你快到了。

关于在正则表达式中解析html的所有强制性免责声明......

<script>
var subject = 'http://service.com/room/dothings?adsf=asdf&dafadsf=dfasdf';
var regex = /room\/(.+)\?/g;
var group1Caps = [];
var match = regex.exec(subject);
while (match != null) {
    if( match[1] != null ) group1Caps.push(match[1]);
    match = regex.exec(subject);
}
if(group1Caps.length > 0) document.write(group1Caps[0],"<br>");
</script>

输出 dothings

如果你在主题中添加字符串,你可以for (key in group1Caps),它会吐出所有的匹配。

Online demo