#regex
Вопрос:
Приведенное ниже регулярное выражение работает в chrome ,но возникает проблема в safari, поскольку оно содержит указатель, здесь нужен этот указатель для правильной работы, так есть ли какой-либо другой способ, которым его можно было бы решить?
(#[a-zA-Z0-9_(,)]{1,30}) (?<!,)$
Регулярное выражение, которое я пытаюсь выполнить, это :
- Что с этого следует начать #
- Затем строка должна быть разделена запятой
- Тогда строка не могла заканчиваться на «запятую»
- После «запятой», если введена новая строка, должен начинаться хэш
- Максимальный предел каждой строки составляет 30, а минимальный-1
Он должен принять:
#tag
#tag_1,#tag2
#tag1,#tag2,#tag3
Он не должен принимать:-
#
#tag(with more than 30 characters)
# tag1,
#tag:///
Комментарии:
1. можете ли вы точно объяснить, чего вы пытаетесь достичь с помощью этого регулярного выражения?
2. Я думаю, ты имеешь в виду посмотреть сзади, верно?
3. вот его взгляд за @Thefourthbird
4. Регулярное выражение, которое я пытаюсь выполнить ,состоит в том , что оно должно начинаться с#, Затем строка должна быть разделена «запятой», Затем строка не может заканчиваться «запятой», После «запятой», если вводится новая строка, то должен начинаться хэш, Максимальный предел каждой строки равен 30, а минимальный-1 @depperm
5. Он должен принимать:- 1. #тег 2. #tag_1,#tag2 3. #tag1,#tag2,#tag3 Он не должен принимать:- 1. # 2. #тег(более 30 символов) 3. # tag1, 4. #тег:/// @MikeM
Ответ №1:
Вы можете убрать запятую класса символов и добавлять ее на каждой итерации
Группа захвата может не захватываться, если вам нужно только совпадение.
^#[a-zA-Z0-9_()]{1,30}(?:,#[a-zA-Z0-9_()]{1,30})*$
Шаблон совпадает:
^
Начало строки#[a-zA-Z0-9_()]{1,30}
Сопоставьте 1-30 повторений класса символов без запятой(?:,#[a-zA-Z0-9_()]{1,30})*
Необязательно повторять,
и 1-30 повторений класса символов без запятой$
Конец строки
Комментарии:
1. Но это соответствует следующему строковому условию #taggg, которое оно принимает :- #tagg,#tag1, ……. @Четвертая птица
2. @am’s Это то, что я понял из вопроса, разве это не нормально? Каковы ожидаемые матчи?
3. Он должен принимать:- 1.#тег 2.#tag_1,#tag2 3.#tag1,#tag2,#tag3 Он не должен принимать:- 1.# 2.#тег(более 30 символов) 3.# tag1, 4.#tag:/// Это ожидаемые совпадения и несоответствия @Четвертая птица
4. @am’s Это соответствует всем этим требованиям, см. regex101.com/r/ymGv9c/1
5. Да, это соответствует моим требованиям, Спасибо за помощь @Четвертая птица