我試圖J*** D**從John Doe字串中實作這一點,但我當前的代碼輸出是**** ***. 這是我當前的代碼:
void main() {
String txt = 'John Doe';
String hideStr = txt.replaceAll(RegExp(r'\S'), '*');
print(hideStr);
}
有什么建議嗎?
uj5u.com熱心網友回復:
您可以使用
String hideStr = txt.replaceAll(RegExp(r'(?<=\S)\S'), '*');
請參閱正則運算式演示。詳情:
(?<=\S)- 在當前位置之前需要一個非空白字符\S- 一個空格字符。
非后視解決方案也是可能的:
String hideStr = txt.replaceAllMapped(RegExp(r'(\S)(\S*)'),
(Match m) => "${m[1]}${'*' * (m[2]?.length ?? 0)}");
詳情:
(\S)(\S*)正則運算式匹配并將非空白字符捕獲到第 1 組,然后將零個或多個空白字符捕獲到第 2 組${m[1]}${'*' * (m[2]?.length ?? 0)}替換是一個串聯${m[1]}- 組 1 值${'*' * (m[2]?.length ?? 0)}- 一個*字符重復第 2 組長度的時間。?? 0是必要的,因為m[2]?.length回傳一個可為空的 int)。
uj5u.com熱心網友回復:
您可以使用否定的外觀來排除開頭和空格之后的字符
void main() {
String txt = 'John Doe';
String hideStr = txt.replaceAll(RegExp(r'(?<!^|\s)[^\s]'), '*');
print(hideStr);
}
因為“J”和“D”位于文本開頭和空格之后,正則運算式不會匹配它
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/485688.html
