我有一个带有一些HTML标记的文本。像这样:
Lorem lipsum <a href="www.example.com"> lorem lipsum.
我想在HTML标记的末尾插入文本style=\"text-decoration: none\
,以便链接没有下划线。
我有一个找到HTML标记的正则表达式模式:<\s*a[^>]*>(.*?)<\s*/\s*a>
我有以下代码来获取段落文本中的正则表达式匹配项并计算HTML标记中最后一个字符的位置:
let range = NSRange(location: 0, length: paragraph.utf16.count)
let regex = try! NSRegularExpression(pattern: "<\\s*a[^>]*>(.*?)<\\s*/\\s*a>")
let allMatches = regex.matches(in: paragraph, options: [], range: range)
let lastCharacter = allMatches[0].range.location + allMatches[0].range.length
如何在该位置插入字符串style=\"text-decoration: none\
?
我尝试过这样的事情:
let newParagraph = paragraph.insert(" style=\"text-decoration: none\"", at: lastCharacter)
但是Xcode指出insert
方法中的第一个参数必须是字符,而不是字符串。
答案 0 :(得分:1)
在我的解决方案中,我使用正则表达式查找<
和>
之间的所有内容,以查找整个HTML标签。找到标签后,我使用replacingOccurrences(of:with:)
方法
style=
属性(加上结束括号)替换结束标签的括号,以创建修改后的标签,这是代码:
let string = "Lorem lipsum <a href=\"www.example.com\"> lorem lipsum <a href=\"www.somewhereelse.com\"> dolor sit amet."
let insertString = " style=\"text-decoration: none\">"
var modifiedString = string
let regex = try! NSRegularExpression(pattern: "<.*?>")
let range = NSRange(string.startIndex..., in: string)
let matches = regex.matches(in: string, range: range)
let tags = matches.map { String(string[Range($0.range, in: string)!]) }
for tag in tags {
let newTag = tag.replacingOccurrences(of: ">", with: insertString)
modifiedString = modifiedString.replacingOccurrences(of: tag, with: newTag)
}
print(modifiedString)
更新的代码现在根据需要使用循环将所有标签替换为增强的标签。为此,您必须将正则表达式更改为非贪婪:<.*?>
而非<.*>
。