Регулярное выражение найти и выбрать
Я пытаюсь выделить все дефисы, чтобы заменить их пробелами. Я делаю так, чтобы обеспечить лучшую доступность в моей CMS. В настоящее время я использую атом найти и заменить с опцией Regex.
<img src="http://myurl.com/images/name-of-image.jpg" title="this-is-my-title" alt="here-is-a-description-of-this-image" />
С помощью регулярного выражения я хотел бы выбрать title и alt и заменить каждый дефис одним пробелом.
Поэтому я подумал начать с:
^(alt|title=\")[\-]*(\")$ //does not work
и это может быть $1
но я не знаю, как выбрать только дефисы, соответствующие этому критерию. Для этого должно быть решение.
1 ответ
краткое
Ввиду того, что вы не указали язык, я просто предполагаю, что регулярное выражение означает любое работающее регулярное выражение, и что вы получите его после. Таким образом, этот ответ использует регулярное выражение PCRE.
Вместо этого вы должны получить все атрибуты по отдельности, а затем, если атрибут находится в вашем списке ["alt", "title"]
, вы должны просто сделать замену строки, чтобы изменить -
в ,
Код
Смотрите регулярное выражение в использовании здесь
(?:\b(?:alt|title)="|\G(?!\A))[^"-]*\K-
Результаты
вход
<img src="http://myurl.com/images/name-of-image.jpg" title="this-is-my-title" alt="here-is-a-description-of-this-image" />
Выход
<img src="http://myurl.com/images/name-of-image.jpg" title="this is my title" alt="here is a description of this image" />
объяснение
(?:\b(?:alt|title)="|\G(?!\A))
Соответствует любому из следующих\b(?:alt|title)="
Подходим следующее\b
Утвердить положение как границу слова(?:alt|title)
Совпадение либоalt
или жеtitle
в прямом смысле="
Подходим это буквально
\G(?!\A)
Утвердить позицию в конце предыдущего матча
[^"-]*?
Подберите любой символ, которого нет в наборе (кроме"
а также-
) любое количество раз\K
Сбрасывает начальную точку указанного совпадения. Все ранее использованные персонажи больше не включаются в финальный матч.-
Подберите символ дефиса-
в прямом смысле