Как я могу совместить, но исключать шаблон регулярного выражения?

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

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

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

cID=[^&]*

Что дает этот результат:

cID=87B6XYZ964D293CF

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

Спасибо

Ответы

Ответ 1

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

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

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

cID=([^&]*)

Ответ 2

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

  • Используйте lookarounds, чтобы вы могли точно совместить то, что вы хотите захватить
    • Нет следов в 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

Ответ 3

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

cID=([^&]*)

а затем получите $1:

87B6XYZ964D293CF

Ответ 4

С помощью 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

Ответ 5

Вот код 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]);

Ответ 6

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

'http://example.com/createSend/step4_1.aspx?cID=876XYZ964D293CF&snap=true&jlkj=kjhkjh&'.match(/(?:cID=+)([^&]*)/)[1];