在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:)方法

  1. 用附加的style=属性(加上一个右括号)替换结束标记的括号以创建修改后的标记,
  2. 用修改后的标签替换原始标签。

这是代码:

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)的字符串中插入字符串的主要内容,如果未能解决你的问题,请参考以下文章

自动在其他应用程序中插入文本 - swift4

在字符串中查找数字并计算,在字符串中插入(Swift)

Swift字符串截取与Range使用

Swift:获取String中单词的开头和结尾字符的索引

如何在Swift 4中增加Index.String类型的变量?

Spring Data Mongo |无法授权插入没有字符串类型的 system.indexes 文档