0

JavaScript Regexp - Найти символы после определённой фразы

10

Я задумался, как использовать регулярное выражение для поиска фразы, которая идет после определенного совпадения. Например:

var phrase = "yesthisismyphrase=thisiswhatIwantmatched";
var match = /phrase=.*/;

Это выражение совпадает с текстом от phrase= до конца строки, но возможно ли получить все после phrase= без изменения самой строки?

4 ответ(ов)

0

Это не так сложно. Просто предположим, что ваш контекст выглядит следующим образом:

const context = "https://example.com/pa/GIx89GdmkABJEAAA+AAAA";

И мы хотим получить шаблон после pa/. Для этого используйте следующий код:

const pattern = context.match(/pa\/(.*)/)[1];

В первом элементе содержится pa/, но во втором элементе группы эта часть отсутствует. Вы можете использовать любой из них в зависимости от ваших потребностей.

0

Данная регулярное выражение phrase.match(/phrase=(.*)/)[1] возвращает строку "thisiswhatIwantmatched".

В этом случае, круглые скобки определяют так называемую группу захвата. Содержимое групп захвата помещается в результирующий массив, начиная с индекса 1 (индекс 0 содержит все совпадение). Таким образом, [1] позволяет получить только то, что было захвачено внутри группы, в данном случае — значение, следующее за phrase=.

0

Попробуем это сделать, надеюсь, это сработает.

var p = /\b([\w|\W]+)\1+(\=)([\w|\W]+)\1+\b/;
console.log(p.test('case1 or AA=AA ilkjoi')); // true
console.log(p.test('case2 or AA=AB'));       // false
console.log(p.test('case3 or 12=14'));       // false

Давайте разберемся с регулярным выражением, которое вы используете.

  • \b — указывает на границу слова.
  • ([\w|\W]+) — захватывающая группа, которая соответствует одному или более символам (буквам, цифрам или любым другим символам).
  • \1+ — ссылается на первый захваченный блок и проверяет, есть ли он повторяющийся один или более раз.
  • (\=) — просто соответствует знаку равенства.
  • ([\w|\W]+) — вторая захватывающая группа, которая соответствует тем же символам, что и первая.
  • \1+ — снова ссылается на первый захваченный блок.
  • \b — снова граница слова.

Теперь, когда вы тестируете строки:

  1. В первой строке ('case1 or AA=AA ilkjoi'), регулярное выражение находит совпадение, так как "AA" повторяется до и после знака равенства.
  2. Во второй строке ('case2 or AA=AB'), "AA" и "AB" разные, поэтому совпадения нет.
  3. В третьей строке ('case3 or 12=14'), также нет совпадения, так как "12" и "14" разные.

Таким образом, регулярное выражение работает как ожидается. Надеюсь, это поможет!

0

Если вы хотите получить значение после регулярного выражения, исключая тестовую фразу, используйте следующее выражение:

/(?:phrase=)(.*)/

Результат будет выглядеть так:

0: "phrase=thisiswhatIwantmatched" // полное совпадение
1: "thisiswhatIwantmatched" // группа совпадения
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь