2013-07-17 4 views
0

Если у меня есть строка "#review?loanId=12-00034&docId=0" и вам нужно выбрать строку loanId ("12-00034"), как бы использовать одно регулярное выражение для этого?Поиск внутренних совпадений с использованием регулярных выражений в Javascript

До сих пор я мог использовать /loanId=[\d-]*/ для извлечения "loanId=12-00034", но как я могу получить только сам идентификатор? Я могу получить его, вложив другое регулярное выражение, но мне было интересно, возможно ли это с помощью только одного регулярного выражения.

+1

Используйте группу захвата. – Brigham

+0

OK ждем. Спасибо, я не знал имя метода для этого. – user2066880

ответ

0

Вы можете использовать это:

var regex = /loanId=([^&"'\s]+)/; 

var match = regex.exec(yourString); 

console.log(match[1]); 

результатом является в первой группе захвата. Поскольку у javascript regex нет функции lookbehind, это единственный способ.

0

Используйте capturing group:

/loanId=([\d-]+)/ 

Как это:

var re = /loanId=([\d-]+)/ 
re.exec("#review?loanId=12-00034&docId=0") 
    // ["loanId=12-00034", "12-00034"] 
re.exec("no match") 
    // null 
1

Это должно помочь

var query = "#review?loanId=12-00034&docId=0" 

var matches = /\bloanId=([-\d]*)/.exec(query) 

console.log(matches[1]); 

// => 12-00034 

Это очень похоже на другие ответы, вот главное отличие, я 'using using \bword boundaries для того чтобы предотвратить regexp от сопрягать i ncorrect id в чем-то вроде whateverloanId=123&loanId=123-456

Второе отличие - моя группа захвата - ([-d]*). Это означает, что если ваша строка имеет пустой кредит, например ?loanId=&something=foo, вы не получите TypeError для matches[1]

Смежные вопросы