Регулярное выражение для сопоставления с шаблоном, содержащим некоторую строку, кроме некоторой строки

#javascript #jquery #regex #html

#javascript #jquery #регулярное выражение #HTML

Вопрос:

У меня есть строка, подобная следующей:

 var string = "'abc' @VAL([Q].[F1 w1 w1 w1])  'hellllllllllo' @VAL([Q].[F2 w])  'anything' @VAL([Q].[F3 w]) anything";
 

я хочу соответствовать следующему шаблону

 @VAL([Q].[F1 w1 w1 w1])
@VAL([Q].[F2 w]) 
@VAL([Q].[F3 w])
 

на самом деле я хочу сопоставить шаблон строки, начинающийся с @VAL(и заканчивающийся)
Я попытался со следующим кодом:

    var patt1 = /@VAL((.*))/g;

   var myPattern = string.match(patt1);
 

и получаем следующий результат

 @VAL([Q].[F1 w1 w1 w1])  'hellllllllllo' @VAL([Q].[F2 w])  'anything' @VAL([Q].[F3 w])
 

я не смог разобраться в этом нужна помощь!!!!!!!!!

Ответ №1:

Это вернет все совпадения:

 result = subject.match(/@VAL([^)]*)/g);
 

Смотрите демонстрацию.

  • @VAL( Матчи @VAL(
  • [^)] соответствует одному символу, который не является a )
  • и * квантификатор повторяет это ноль или более раз
  • *) соответствует закрывающей круглой скобке

Ответ №2:

Ваше регулярное выражение слишком жадное, используйте это регулярное выражение на основе отрицания:

 var patt1 = /@VAL(([^)]*))/g;
 

ИЛИ просто сделайте его ленивым:

 var patt1 = /@VAL((.*?))/g;


var m = string.match(patt1);
//=> ["@VAL([Q].[F1 w1 w1 w1])", "@VAL([Q].[F2 w])", "@VAL([Q].[F3 w])"]