更改此字符串的最佳方法是什么?
<mat-form-field [floatLabel]="'never'">
<mat-placeholder *ngIf="!input.value">Choose a date</mat-placeholder>
<input #input matInput [matDatepicker]="picker">
<mat-datepicker-toggle matSuffix [for]="picker"></mat-datepicker-toggle>
<mat-datepicker #picker></mat-datepicker>
</mat-form-field>
将转换为属性字符串,同时摆脱<>中的部分,我想更改(Cooldown:90s)的字体。我知道如何更改和制作NSMutableAttributedStrings,但是在这种情况下,我只限于如何定位和更改(冷却时间:90年代)。 "gain quickness for 5 seconds. <c=@reminder>(Cooldown: 90s)</c> only after"
和<c=@reminder>
之间的文本将更改,因此我需要使用它们来查找所需的内容。
这些似乎是旨在用于此目的的指标,我只是不知道。
答案 0 :(得分:0)
首先,您需要一个正则表达式来查找和替换所有带标签的字符串。
看一看字符串,一个可能的正则表达式可能是<c=@([a-zA-Z-9]+)>([^<]*)</c>
。请注意,只有在标签之间的字符串不包含<
字符的情况下,此方法才有效。
现在有了正则表达式,我们只需要将其应用于输入字符串:
let str = "gain quickness for 5 seconds. <c=@reminder>(Cooldown: 90s)</c> only after"
let attrStr = NSMutableAttributedString(string: str)
let regex = try! NSRegularExpression(pattern: "<c=@([a-zA-Z-9]+)>([^<]*)</c>", options: [])
while let match = regex.matches(in: attrStr.string, options: [], range: NSRange(location: 0, length: attrStr.string.utf16.count)).first {
let indicator = str[Range(match.range(at: 1), in: str)!]
let substr = str[Range(match.range(at: 2), in: str)!]
let replacement = NSMutableAttributedString(string: String(substr))
// now based on the indicator variable you might want to apply some transformations in the `substr` attributed string
attrStr.replaceCharacters(in: match.range, with: replacement)
}