Возьми этот URL

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

Скажите, если я хочу захватить dothings, saythings, Я теперь следующее регулярное выражение

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

И в результате я получаю вот это.

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

Что я должен написать, чтобы получить строку выше только с одним элементом в массиве.

0
user2167582 14 Май 2014 в 04:35

2 ответа

Лучший ответ

Я знаю, что это не отвечает на ваш вопрос, но разобрать URL-адрес с помощью регулярного выражения непросто, а в некоторых случаях даже небезопасно. Я бы сделал синтаксический анализ без регулярного выражения.

В браузере:

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
Gergo Erdosi 14 Май 2014 в 01:55

На самом деле это просто. Вы были почти у цели.

Со всеми обязательными оговорками о разборе 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), и он выдаст все совпадения.

Онлайн демо

1
zx81 14 Май 2014 в 01:04