在index(swift)的字符串中插入字符串
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在index(swift)的字符串中插入字符串相关的知识,希望对你有一定的参考价值。
我有一个文本,里面有一些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
方法中的第一个参数必须是字符,而不是字符串。
答案
在我的解决方案中,我使用正则表达式查找<
and >
to之间的所有内容,找到整个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)
更新后的代码现在使用循环根据您的要求用增强型标签替换所有标签。为此,您必须将正则表达式更改为非贪婪:<.*?>
而不是<.*>
。
以上是关于在index(swift)的字符串中插入字符串的主要内容,如果未能解决你的问题,请参考以下文章