簡體   English   中英

在Regex中如何在不在其他字母字符內時查找和替換字符?

[英]In Regex How to find and replace characters when they are not within other alphabetic characters?

我正在用Regexjavascript格式化日期時間字符串,所以我想要:

  1. d不在其他字母字符內時,查找並替換所有d字符。 像這樣: 在此處輸入圖片說明

  2. dd不在其他字母字符內時,查找並替換所有dd字符。 像這樣: 在此處輸入圖片說明


我測試了/\\bd\\b/mg模式,但是它的結果並不是我每次都想要的。

如何在以下命令中排除不需要的情況:

str = str.replace(/\bd\b/mg, number);

您發布的正則表達式不會將_視為單詞邊界,因此不會按預期替換該字符。

為了在要替換的d字符之前或之后也包含此字符,可以使用類似於以下的表達式:

  1. 替換d

     /(\\b|_)(d)(\\b|_)/mg 
  2. 替換dd

     /(\\b|_)(dd)(\\b|_)/mg 

或以相同的方式替換兩者(如果可以):

    /(\b|_)(d|dd)(\b|_)/mg

StackOverflow上另一個線程中此答案下的注釋 ,還建議使用可以格式化日期的庫,而不是自己實現。

更新:正如有人提到的那樣,與此有關的問題還在於,在正則表達式中包含_ ,在替換后將其刪除。 但是,您可以調用replace並使用捕獲括號引用,如下所示:

    str.replace(/(\b|_)(d)(\b|_)/mg, "$1" + number + "$3")

我已經更新了此答案中發布的早期表達式,以使用此方法。

請注意,我不知道您想考慮的所有情況,因此,如果您在使用建議的解決方案時遇到任何問題,或者在您的情況下無法正常工作,請告訴我,以便我們為您提供幫助。

我可以先行使用,如果您不使用JavaScript,那么也可以先行使用。

前瞻示例,檢查是否沒有以下字母字符:

(?=[^a-zA-Z])

如果您使用的是JavaScript,則它不支持向后搜索,因此您將需要使用捕獲組和反向引用。

對於JS,請在最外面的括號中捕獲該部分,然后使用\\ 1,\\ 2 ...進行定位:

[^a-zA-Z](d(?=[^a-zA-Z]))

非JS可以使用lookbehind:

(?<=[^a-zA-Z])d(?=[^a-zA-Z])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM