Как я могу сопоставить, но исключить шаблон регулярных выражений? - PullRequest
20 голосов
/ 09 июня 2010

У меня есть этот URL:

http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&

И это регулярное выражение:

cID=[^&]*

Который дает этот результат:

cID=87B6XYZ964D293CF

Как мне удалить "cID ="?

Спасибо

Ответы [ 6 ]

23 голосов
/ 09 июня 2010

Вы можете использовать lookbehind (не в Javascript):

(?<=cID=)[^&]*

Или вы можете использовать группировку и взять первую группу:

cID=([^&]*)
12 голосов
/ 09 июня 2010

Вообще говоря, чтобы выполнить что-то подобное, у вас есть по крайней мере 3 варианта:

  • Используйте обходные пути, чтобы вы могли точно соответствовать тому, что вы хотите захватить
    • Нет просмотра позадиJavascript, к сожалению
  • Использование группы захвата для захвата определенных строк
    • Почти универсально поддерживается во всех вариантах
  • Если все остальное не удается, вы всегда можете просто взять substring соответствия
    • Хорошо работает, если длина префикса / суффикса для прерывания является известной константой

Ссылки


Примеры

Для данной тестовой строки:

i have 35 dogs, 16 cats and 10 elephants

Это совпадения некоторых шаблонов регулярных выражений:

Вы также можете сделать несколько снимков, например:

  • (\d+) (cats|dogs) дает 2 результата матча ( см. На rubular.com )
    • Результат 1: 35 dogs
      • Группа 1 захватывает 35
      • Группа2 захвата dogs
    • Результат 2: 16 cats
      • Группа 1 захвата 16
      • Группа 2 захвата cats
4 голосов
/ 09 июня 2010

С JavaScript вы захотите использовать группу захвата (поместите часть, которую вы хотите захватить, внутри ()) в регулярное выражение

var url = 'http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&';

var match = url.match(/cID=([^&]*)/);
// ["cID=876XYZ964D293CF", "876XYZ964D293CF"]

// match[0] is the whole pattern
// match[1] is the first capture group - ([^&]*)
// match will be 'false' if the match failed entirely
4 голосов
/ 09 июня 2010

Используя группы захвата:

cID=([^&]*)

и получите $ 1:

87B6XYZ964D293CF
1 голос
/ 09 июня 2010

Вот код Javascript:

 var str = "http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&";
    var myReg = new RegExp("cID=([^&]*)", "i");
    var myMatch = myReg.exec(str);
    alert(myMatch[1]);
0 голосов
/ 25 декабря 2014

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

'http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&'.match(/(?:cID=+)([^&]*)/)[1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...