JavaScript Regexp - Найти символы после определённой фразы
Я задумался, как использовать регулярное выражение для поиска фразы, которая идет после определенного совпадения. Например:
var phrase = "yesthisismyphrase=thisiswhatIwantmatched";
var match = /phrase=.*/;
Это выражение совпадает с текстом от phrase=
до конца строки, но возможно ли получить все после phrase=
без изменения самой строки?
4 ответ(ов)
Это не так сложно. Просто предположим, что ваш контекст выглядит следующим образом:
const context = "https://example.com/pa/GIx89GdmkABJEAAA+AAAA";
И мы хотим получить шаблон после pa/
. Для этого используйте следующий код:
const pattern = context.match(/pa\/(.*)/)[1];
В первом элементе содержится pa/
, но во втором элементе группы эта часть отсутствует. Вы можете использовать любой из них в зависимости от ваших потребностей.
Данная регулярное выражение phrase.match(/phrase=(.*)/)[1]
возвращает строку "thisiswhatIwantmatched"
.
В этом случае, круглые скобки определяют так называемую группу захвата. Содержимое групп захвата помещается в результирующий массив, начиная с индекса 1 (индекс 0 содержит все совпадение). Таким образом, [1]
позволяет получить только то, что было захвачено внутри группы, в данном случае — значение, следующее за phrase=
.
Попробуем это сделать, надеюсь, это сработает.
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
— снова граница слова.
Теперь, когда вы тестируете строки:
- В первой строке (
'case1 or AA=AA ilkjoi'
), регулярное выражение находит совпадение, так как "AA" повторяется до и после знака равенства. - Во второй строке (
'case2 or AA=AB'
), "AA" и "AB" разные, поэтому совпадения нет. - В третьей строке (
'case3 or 12=14'
), также нет совпадения, так как "12" и "14" разные.
Таким образом, регулярное выражение работает как ожидается. Надеюсь, это поможет!
Если вы хотите получить значение после регулярного выражения, исключая тестовую фразу, используйте следующее выражение:
/(?:phrase=)(.*)/
Результат будет выглядеть так:
0: "phrase=thisiswhatIwantmatched" // полное совпадение
1: "thisiswhatIwantmatched" // группа совпадения
Как использовать переменную в регулярном выражении?
Как разделить строку с несколькими разделителями в JavaScript?
Экранирование строки для использования в регулярных выражениях JavaScript [duplicate]
Как удалить все переносы строк из строки
Удаление всего, кроме чисел, из строки