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

63
5

Я с удовольствием нахожу все строки в наших проектах, которые не являются выражениями angularjs, потому что мы переходим на несколько языков (так что каждая строка не полностью между фигурными фигурными скобками).

Я хочу создать регулярное выражение, которое соответствует всем строкам, которые не имеют угловых выражений (или часть строки не является угловым выражением).

Названия var описывают, которые должны соответствовать (да), а какие не должны (нет).

var yes = "test";
var nope = "{{xyz}}";
var yes = "test {{xyz}}";
var nope = "{{::xyz}}";
var nope = "{{xyz}} {{abc}}"; //as whitespace is okay

Пробовал много разных вещей, используя негативные образы и т.д., Но в итоге получилось даже не работающее регулярное выражение.

"([^}}])+{{|"$

Может быть, кто-то может мне помочь, так как мне нравится взорваться...

Regex101: https://regex101.com/r/VePtVp/1

спросил(а) 2021-01-27T20:01:59+03:00 4 месяца, 3 недели назад
1
Решение
63

Вы можете использовать следующее регулярное выражение для соответствия:

/"(?:\s*{{[^\s}]*}}\s*)+"/

Демо-версия RegEx

RegEx Подробности:

    ": Стартовая цитата матча (?: Запуск группы без захвата
      \s*{{[^\s}]*}}\s*: сопоставить {{...}} строку, окруженную необязательными пробелами.
    )+: Завершить группу без захвата. + соответствует 1 или более этой группе ": Конец матча

ответил(а) 2021-01-27T20:01:59+03:00 4 месяца, 3 недели назад
44

Благодаря anubhava, поскольку его сообщение и объяснение помогли мне создать это регулярное выражение здесь:

"(?!(\{\{[^\s]*\}\}\s*)+").*"

var yes = "test";
var nope = "{{xyz}}";
var yes = "test {{xyz}}";
var yes = "{test";
var yes = "{test} bearbeiten";
var yes = "{test}";
var nope = "{{::xyz}}";
var nope = "{{xyz}} {{abc}}";
var yes = "{{xyz}} test {{abc}}";
var yes = "{{xyz}} test {{abc}} temp {{var}}";

https://regex101.com/r/r9lmDL/2

ответил(а) 2021-01-27T20:01:59+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема