отрицание в regex

189
13 октября 2017, 18:12

этим патерном \bif\((.+)\)\{([\s\S]+?)} я выбираю все блоки if http://joxi.ru/8AnWw7VcqgpKOr как мне выделить все кроме этих блоков. грубо говоря инвертировать патерн

проверяю в сервисе https://regexr.com/

Answer 1

Регулярные выражения обычно используются для нахождения текста. Например, если нужно найти все цифры, можно использовать /\d+/g. Если нужно найти все символы, отличные от цифр, можно пользоваться "инвертированным" классом \D, /\D+/g. Для регулярных выражений, содержащих последовательности шаблонов, не существует такого "конструкта", который бы находил текст, отличный от такой последовательности (есть один такой, Lucene, но он, скорее, исключение, да и более похож на wildcard-шаблоны). Близко по значению подходит "жадный" "умеренный" квантификатор (tempered greedy token, /(?:(?!ШАБЛОН)[\s\S])+/g), но он, на самом деле, находит последовательность символов, которые не являются начальным пунктом ШАБЛОНа.

Для "отрицания" или "инвертирования" данного шаблона достаточно разбить строку с его помощью, предварительно заменив захватывающие подмаски незахватываемыми (чтобы избежать добавления захваченных подстрок в получаемый массив):

var s = "[prop_code_4] - это r('необычный', 'необыкновенный', 'особенный', 'феноменальный', 'незаурядный', 'особый', 'оригинальный', 'курьезный', 'непривычный', 'непростой', 'удивительный') гаджет, r('предназначенный', 'созданный', 'который создан') для погружения в мир r('виртуальной', 'дополненной', 'дополнительной') \r\nif( [prop_code_2] == 'Красный' ){\r\nСегодня для погружения в мир r('виртуальной', 'дополненной') r('реальности', 'действительности') r('достаточно', 'стоит только', 'необходимо') иметь при себе смартфон плюс [prop_code_4]. r('Обладая', 'Владея') всем этим, дело остается за малым, всего-то найти r('необходимый', 'нужный', 'подходящий') медиа-контент это могут быть как r('приложения, игры', 'игры, приложения'), так и r('видеоролики', 'видео', 'видеозаписи')\r\n}\r\n\r\n[prop_code_4] - это r('необычный', 'необыкновенный', 'особенный', 'феноменальный', 'незаурядный', 'особый', 'оригинальный', 'курьезный', 'непривычный', 'непростой', 'удивительный') гаджет, r('предназначенный', 'созданный', 'который создан') для погружения в мир r('виртуальной', 'дополненной', 'дополнительной') \r\nif( [prop_code_2] == 'Красный' ){\r\nСегодня для погружения в мир r('виртуальной', 'дополненной') r('реальности', 'действительности') r('достаточно', 'стоит только', 'необходимо') иметь при себе смартфон плюс [prop_code_4]. r('Обладая', 'Владея') всем этим, дело остается за малым, всего-то найти r('необходимый', 'нужный', 'подходящий') медиа-контент это могут быть как r('приложения, игры', 'игры, приложения'), так и r('видеоролики', 'видео', 'видеозаписи')\r\n}"; 
var result = s.split(/\bif\(.+\)\{[\s\S]+?}/); 
console.log(result.join("")); // если нужна строка 
console.log(result.filter(Boolean)); // если нужен массив

.filter(Boolean) удалит пустые элементы массива.

READ ALSO
Сравнения значений масивов

Сравнения значений масивов

У нас есть несколько div с класом iteam, дальше нам нужно взять ключ у всех елементов iteam , после из базы берем значения id, после нам нужно сравнить...

262
Laravel, get_declared_classes() не видит ни одну модель кроме User

Laravel, get_declared_classes() не видит ни одну модель кроме User

Все модели создавались артисаномПри вызове get_declared_classes() Не получаю все модели, только модель User

200
PHP проверка на наличие файла по таймеру

PHP проверка на наличие файла по таймеру

Можно ли с помощью php проверять наличие какого либо файла в каталоге по таймеру 24/7

189