【发布时间】:2018-08-06 17:12:40
【问题描述】:
我正在为一些动态降价设置样式,但是我用于样式设置的框架不支持链接的嵌套标签。
我需要有效地解析字符串并关闭样式标记标记:
"__Some bold text [FIRST LINK](https://FIRSTLINK.COM \"FIRST LINK\"), more bold text.__\n\n additional text \n\n
*some italic text[SECOND LINK](https://SECONDLINK.COM) ending text,*"
到这里:
"__Some bold text __[FIRST LINK](https://FIRSTLINK.COM \"FIRST LINK\")__, more bold text.__\n\n additional text \n\n
*some italic text*[SECOND LINK](https://SECONDLINK.COM)* ending text,*"
这仅适用于粗体和斜体文本。我开始沿着
的路线走var str = "__Some bold text [FIRST LINK](https://FIRSTLINK.COM \"FIRST LINK\"), more bold text.__\n\n additional text \n\n *some italic text[SECOND LINK](https://SECONDLINK.COM) ending text,*"
let bold = str.components(separatedBy: "__")
for var string in bold {
if let matchedIndex = string.index(of: "[") {
string.insert(contentsOf: "__", at: matchedIndex)
}
}
但想知道,在 Swift 中有没有更好的方法来做到这一点?
编辑 - 为清楚起见 - 本质上我需要修改现有字符串以在链接标签之前具有封闭标签并在链接标签之后重新打开 - 这可以防止链接与样式标签嵌套并允许样式器框架相应地应用属性字符串
编辑 --- 与@Linus 注释一致,这里是正则表达式的结果(请注意在扩展的一侧运行这些以便能够在操场上进行测试
var str = "__Some bold text [FIRST LINK](https://FIRSTLINK.COM \"FIRST LINK\"), more bold text.__\n additional text \n *some italic text[SECOND LINK](https://SECONDLINK.COM) ending text,*\n__sfdadhfjkh [THIRD LINK](https://THIRDLINK.COM \"THIRD LINK\"), more bold text.__"
do {
var regex = try NSRegularExpression(pattern: "(\\[.*?\\))" , options: [.caseInsensitive])
var newString = regex.stringByReplacingMatches(in: str, options: [], range: NSMakeRange(0, str.utf16.count), withTemplate: "__$1__")
print("\nFirst regex __$1__ \n\n\(newString)")
regex = try NSRegularExpression(pattern: "(\\[.*?\\))" , options: [.caseInsensitive])
var newerString = regex.stringByReplacingMatches(in: str, options: [], range: NSMakeRange(0, str.utf16.count), withTemplate: "*$1*")
print("\nSecond Regex *$1* \n\n"+newerString)
} catch { print("ERROR: searchFor regex (\("(\\[.*?\\))")) on string (\(str)) failed") }
打印结果
First regex __$1__
__Some bold text __[FIRST LINK](https://FIRSTLINK.COM "FIRST LINK")__, more bold text.__
additional text
*some italic text__[SECOND LINK](https://SECONDLINK.COM)__ ending text,*
__sfdadhfjkh __[THIRD LINK](https://THIRDLINK.COM "THIRD LINK")__, more bold text.__
Second Regex *$1*
__Some bold text *[FIRST LINK](https://FIRSTLINK.COM "FIRST LINK")*, more bold text.__
additional text
*some italic text*[SECOND LINK](https://SECONDLINK.COM)* ending text,*
__sfdadhfjkh *[THIRD LINK](https://THIRDLINK.COM "THIRD LINK")*, more bold text.__
我需要在同一个字符串上同时修改斜体和强标记,以便将其传递给要设置样式的视图
【问题讨论】:
-
看起来像是正则表达式的工作。
-
你的例子不起作用,对吧?我没有看到在链接的右括号之后插入
__的任何内容。 -
@NRitH 这个例子并不完整,因为它只是表明我要走的路线......