Условное регулярное выражение в кавычках и двойных кавычках - PullRequest
0 голосов
/ 31 мая 2018

У меня есть это RegEx:

/templateUrl:\s*'([^']+?\.html)'/g

Я тоже пытаюсь принять двойные кавычки.До сих пор я узнал, что это способ создания условий:

(?(?=regex)then|else)

Итак, я получу:

/templateUrl:\s*(?(?=')([^']+?\.html')|(?(?=")([^"]+?\.html")))/g

Но это не работает .. что я пропускаю?

РЕДАКТИРОВАТЬ:

как насчет гигантского ИЛИ?

/templateUrl:\s*('([^']+?\.html)')|("([^"]+?\.html)")/g

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

У вас также есть эта возможность, которая хорошо работает

(templateUrl:)(?:\s*)(["|'](.*\.html)["|'])

отредактировано для того, чтобы учесть обратные отсчеты

templateUrl:\s*([<="|'|`].*\.html[="|'|`])

Вы поймаете templateUrl без лишнего пробела путь html без кавычек test.html и путь с кавычками "test.html" или 'test.html' или `test.html`

Я надеюсь, что это может помочь вам:)

0 голосов
/ 31 мая 2018

Окончательное решение с лучшей производительностью, как говорил Пойнти

/(templateUrl:\s*)(['"])([^\2]+?\.html\2)/g

[abdd] намного быстрее, чем a | b | c | d

Finalрешение с обратная ссылка :

(templateUrl:\s*)('|")([^\2]+?\.html\2)

Предыдущее решение (также работает) с ИЛИ

Тест здесь

(templateUrl:\s*)('([^']+?\.html)'|"([^"]+?\.html)")

Тест здесь

...