首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

正則表達式進階:替換大括號外的數字為星號

     編輯:程式設計綜合問答

需求

源串:234bad{123}abca34{12}abaca12
目標:大括號 外 的數字替換為 *,大括號 內 保持不變。
結果:***bad{123}abca**{12}abaca**

核心技巧:負向前瞻

// 正則
\d(?![^{}]*})

// 解釋
\d           # 匹配一個數字
(?![^{}]*})  # 負向前瞻:斷言後面沒有「非大括號字符後跟 }」,即不在 {} 內

各語言實現

JavaScript

const str = '234bad{123}abca34{12}abaca12';
const res = str.replace(/\d(?![^{}]*})/g, '*');
console.log(res); // ***bad{123}abca**{12}abaca**

Java

String res = str.replaceAll("\\d(?![^{}]*})", "*");

Python

import re
res = re.sub(r'\d(?![^{}]*})', '*', str)

進階場景:嵌套大括號

若存在 {a{1}b},上述正則失效。需用 遞歸正則(PCRE/Go/Java 不支持)或 狀態機解析:

function replaceOutsideBraces(s) {
    let depth = 0, out = '';
    for (let ch of s) {
        if (ch === '{') depth++;
        else if (ch === '}') depth--;
        out += (depth === 0 && /\d/.test(ch)) ? '*' : ch;
    }
    return out;
}

測試驗證

在線測試:regex101.com 貼入正則 \d(?![^{}]*}) 即時高亮匹配位置。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved