RegEx найти все совпадения, которых нет в следующем наборе - PullRequest
2 голосов
/ 05 апреля 2020

Как выполнить регулярное выражение для замены символа точки, которого нет в указанном совпадении c (например, в теге HTML)

str = "Hi. the symbol before me is my match target <img src='http://skip.these.dots/and.this.as.well' alt='me.three' /> but still match this."

Для замены на (для пример) * символ

res = "Hi* the symbol before me is my match target <img src='http://skip.these.dots/and.this.as.well' alt='me.three' /> but still match this*"

1 Ответ

1 голос
/ 05 апреля 2020

Попробуйте это:

\.(?![^<]*\/>)

Демонстрация

Механизм регулярных выражений выполняет следующие операции.

\.      # match period
(?!     # begin negative lookahead
  [^<]* # match 0+ chars other than '<'
  \/>   # match '/>'
)

Отрицательный просмотр завершается неудачно, если он встречает /> после периода без какого-либо вмешательства <, означая, что период должен быть между < и />.

Вы будете sh, чтобы заменить каждое совпадение периода на *. То, как вы это делаете, зависит от языка, который вы используете, но это, несомненно, просто.

...