Как изменить это регулярное выражение хэштега, чтобы проверить, является ли второй символ az или AZ? - PullRequest
1 голос
/ 22 октября 2019

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

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

/(^|\B)#(?![0-9_]+\b)([a-zA-Z0-9_]{1,20})(\b|\r)/g

Единственная проблема, с которой я сталкиваюсь - я не могу понять, как проверить, является ли второй символ az (первый символ будетбыть хэштегом). Я хочу, чтобы первым символом после хэштега был аз или аз. Никаких цифр или буквенно-цифровых символов.

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

Ответы [ 3 ]

3 голосов
/ 22 октября 2019

Как я уже упоминал в комментариях, вы можете заменить [a-zA-Z0-9_]{1,20} на [a-zA-Z][a-zA-Z0-9_]{0,19}, чтобы первый символ гарантированно был буквой, а затем следовал от 0 до 19 символов слова (буквенно-цифровой или знак подчеркивания).

Однако в вашем шаблоне есть и другие ненужные части. Похоже, все, что вам нужно, это что-то вроде этого:

/(?:^|\B)#[a-zA-Z][a-zA-Z0-9_]{0,19}\b/g

Демо .

Разбивка (?:^|\B):

(?:         # Start of a non-capturing group (don't use a capturing group unless needed).
    ^       # Beginning of the string/line.
    |       # Alternation (OR).
    \B      # The opposite of `\b`. In other words, it makes sure that 
            # the `#` is not preceded by a word character.
)           # End of the non-capturing group.

Примечание: Вы также можете заменить [a-zA-Z0-9_] на \w.


Ссылки:

1 голос
/ 22 октября 2019

В вашем паттерне вы используете (?![0-9_]+\b), который утверждает, что то, что находится справа, не является цифрой или подчеркиванием и может совпадать с множеством других символов, кроме прописных или строчных букв az.

Если вы хотите, вы можете использовать эту часть [a-zA-Z0-9_]{1,20}, но вместо этого вы должны использовать положительный прогноз вместо (?=[a-zA-Z]), чтобы утверждать, что прямо направо - верхний или нижний регистр az.

(?:^|\B)#(?=[a-zA-Z])[a-zA-Z0-9_]{1,20}\b

Regex demo

1 голос
/ 22 октября 2019

ниже должно работать.

(^|\B)#(?![0-9_]+\b)([a-zA-Z][a-zA-Z0-9_]{0,19})(\b|\r)

Если вы хотите принять только два или более хэштегов букв, измените {0,19} на {1,19}.

Здесь вы можете проверить

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