Есть ли способ сделать это быстрым вечером с использованием replacecingOccurferences?
Регулярные выражения ICU не выполняют математические функции. Вам придется иметь дело с ними по одному, выполняя поиск, выполняя вычисления, а затем выполняя замену для этого вхождения, повторяя это в al oop. L oop в обратном порядке, чтобы избежать проблем со смещением индекса.
Например:
var s = """
yo[size=6%]ooo[/size]heyho[size=10%]yyy[/size]ha
"""
let font_size = 10
let reg = try! NSRegularExpression(pattern: "\\[size=(\\d+)%\\]([\\s\\S]*?)\\[\\/size\\]", options: [])
let matches = reg.matches(in: s, options: [], range: NSRange(location: 0, length: s.utf16.count))
let rev = matches.reversed() // work backwards for replacement
for match in rev {
let r = match.range
let size = s[Range(match.range(at:1), in:s)!]
let text = s[Range(match.range(at:2), in:s)!]
let prefix = "<font size=\""
let num = String(Int(size)!*font_size)
let rest = "\">" + text + "</font>"
s = s.replacingCharacters(in: Range(r, in:s)!, with: prefix + num + rest)
}
print(s)
Сейчас s
это
yo<font size="60">ooo</font>heyho<font size="100">yyy</font>ha