Использование регулярных выражений, как остановить идентификаторы соответствия строк - PullRequest
0 голосов
/ 02 июня 2018

Допустим, у меня есть этот "код", который я хочу передать.

var text = 'hello'

Вот мое регулярное выражение.

  • Строка: ([az \ s] +)
  • Идентификатор: [az] +

Теперь, когда я помещаю свой код в regexr.com и использую идентификатор regex, он совпадает со строкой в ​​качестве идентификатора, как бы я не позволил ей соответствоватьстроки как идентификаторы?

1 Ответ

0 голосов
/ 02 июня 2018

Что идентифицирует строку?Кавычки.В вашем случае: одинарные кавычки.

Поэтому мы хотим сопоставить содержимое между кавычками в виде строки.Для этого мы можем использовать следующее ленивое регулярное выражение:

'.*?'

Чтобы разрешить обе кавычки, вы можете использовать: '.*?'|".*?" или то же самое с обратной ссылкой (['"]).*?\1.

Еслиразрешено экранировать строки, это становится еще сложнее.Для этого я предлагаю использовать рекурсивное регулярное выражение:

((['"])(?>[^'"\\]++|\\.|(?1))*+\2)

Сэмплы совпадают :

a = "abc   dsfsd", b= ' abc   dsfsd'
c ="abc\"   dsfsd"
d= "abc\\"

Для соответствия любым идентификаторам, кроме строк, которые вы можете использовать:

[a-z]+(?=([^']*['][^']*['])*[^']*$)

(или здесь версия, которая соответствует обоим типам цитат: [a-z]+(?=([^'"]*(["'])[^"']*\2)*[^"']*$))

Опять же, она становится более сложной, если вы хотите учесть экранированные кавычки:

[a-z]+(?=([^"'\\]*(\\.|(["'])([^"'\\]*\\.)*[^"'\\]*\3))*[^"']*$)

Надеюсь, это поможет.

...