Проблема:
let attributedString = NSMutableAttributedString(string: targetString)
Вы создаете NSAttributedString
со своей строкой HTML без разбора. Итак, вы видите теги HTML.
У вас уже есть свой собственный метод, который анализирует строку HTML в NSAttributedString
, использует ее (и помните, что нам нужен изменяемый):
let attributedString = NSMutableAttributedString(attributedString: targetString.htmlAttributedString(fontSize: 14.0))
Теперь преобразование NSAttributedString
удалило теги HTML (и интерпретирует их, если это возможно, потому что NSAttributedString
не интерпретирует ВСЕ теги HTML, только несколько). Так что длина, диапазоны все разные.
Так что вы больше не можете этого делать:
let range = NSRange(location: 0, length: targetString.utf16.count)
Вам необходимо обновить его до:
let range = NSRange(location: 0, length: attributedString.string.utf16.count)
То же самое здесь:
for match in regex.matches(in: targetString, options: .withTransparentBounds, range: range) {
Будет обновлено до:
for match in regex.matches(in: attributedString.string, options: .withTransparentBounds, range: range) {