簡體   English   中英

正則表達式匹配分隔符之間的特殊字符

[英]regular expression to match special characters between delimiters

我有一個基本的字符串,並希望只在括號之間得到特定的字符

基本字符串:這是一個測試字符串[或多或少]

正則表達式:捕捉所有r和e的作品就好了。

(r|e) 

=>這是E處ST STř荷蘭國際集團[MOØ 重新 R LëSS]

現在我想使用以下正則表達式並將其與我的正則表達式組合在一起,只給出括號之間的r和e,但遺憾的是這不起作用:

\[(r|e)\]

預期結果應該是:mo re o r l s ss

誰能解釋一下?

編輯:問題非常類似於這個: 正則表達式查找包含在兩個字符之間的字符串,同時排除分隔符

但有區別的是,我不想在括號之間得到整個字符串。

跟進問題

base string = 'this is a link:/en/test/äpfel/öhr[MyLink_with_äöü] BREAK äöü is now allowed'

我需要找到非ASCII字符AOU,以取代他們,但只在一個正則表達式link:...]子與字開頭link:和一個結束]字符。

結果字符串將如下所示:

result string = 'this is a link:/en/test/apfel/ohr[MyLink_with_aou] BREAK äöü is now allowed again'

注釋中的解決方案中的正則表達式/[äöü]+(?=[^\\]\\[]*])/g僅在兩個括號之間提供äöü個字符。

我知道正則表達式中有一個char列表的前瞻性前瞻,但我想知道為什么這個不起作用:

/link:([äöü]+(?=[^\\]\\[]*])/

謝謝

您可以使用以下解決方案:在link:]之間匹配所有內容,並僅在替換回調方法中的匹配子字符串內替換您的字符:

 var hashmap = {"ä":"a", "ö":"o", "ü":"u"}; var s = 'this is a link:/en/test/äpfel/öhr[MyLink_with_äöü] BREAK äöü is now allowed'; var res = s.replace(/\\blink:[^\\]]*/g, function(m) { // m = link:/en/test/äpfel/öhr[MyLink_with_äöü] return m.replace(/[äöü]/g, function(n) { // n = ä, then ö, then ü, return hashmap[n]; // each time replaced with the hashmap value }); }); console.log(res); 

圖案細節

  • \\b - 領先的單詞邊界
  • link: - 整個單詞link : a之后
  • [^\\]]* -比其他零個或多個字符] (A [^...]是一個否定的字符類,它匹配任何字符/炭范圍(一個或多個),但在其內部限定的那些)。

另外,請參閱有效替換字符串中的所有重音字符?

暫無
暫無

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

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