Регулярное выражение работает в chrome и других браузерах, но возвращает недопустимую ошибку в safari

#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. Да, это соответствует моим требованиям, Спасибо за помощь @Четвертая птица