Javascript Regex: получить все изнутри / теги - PullRequest
0 голосов
/ 27 октября 2010

Что я хочу


Из вышесказанного subject Я хочу получить search=adam и page=content и message=2.

Тема:


/search=adam/page=content/message=2

То, что я пробовал до сих пор


(\/)+search+\=+(.*)\/ 

Но это не хорошо, потому что иногдасубъект заканчивается ничем, и в моем случае должно быть /

(\/)+search+\=+(.*?)+(\/*?)

Но это не хорошо, потому что идет вразрез с (\/*?) и показывает мне все, что после /search=

Подсказка инструмента:


Regex Tester

Ответы [ 2 ]

3 голосов
/ 27 октября 2010

Используйте String.split (), регулярное выражение не требуется:

var A = '/search=adam/page=content/message=2'.split('/');

Обратите внимание, что вам, возможно, придется отказаться от первого элемента массива, используя .slice(1).

Затем вы можете выполнить итерациюпары имя-значение, использующие что-то вроде:

for(var x = 0; x < A.length; x++) {
    var nameValue = A[x].split('=');
    if(nameValue[0] == 'search') {
        // do something with nameValue[1]
    }
}

Предполагается, что в значении не будет знаков равенства.Надеюсь, что это так, но если нет, вы можете использовать nameValue.slice(1).join('=') вместо nameValue[1];

2 голосов
/ 27 октября 2010

показывает мне все, что после / search =

Вы использовали жадный .*, который также будет счастливо соответствовать слешам.Вы можете использовать не жадный .*? или класс символов, который исключает косую черту:

(\/|^)search=([^\/]*)(\/|$)

Здесь фронт и конец могут быть косой чертой или началом / концом (^ / $) строки.(Я удалил + s, так как не могу понять, что они должны делать.)

Либо, забудьте про регулярное выражение:

var params= {};
var pieces= subject.split('/');
for (var i= pieces.length; i-->0;) {
    var ix= pieces[i].indexOf('=');
    if (ix!==-1)
        params[pieces[i].slice(0, ix)]= pieces[i].slice(ix+1);
}

ТеперьВы можете просто сказать params.search, params.page и т. д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...