簡體   English   中英

正則表達式匹配字符串中的單詞或單詞之間的點(可選)

[英]Regex to match a word or a dot between words (optionally) in a string

我目前正在處理一個與特殊字符之間的單詞匹配的問題。 可以選擇匹配點之間的單詞。

我目前嘗試使用正則表達式模式,它在中間有點的單詞中效果很好,但我很難讓它與沒有點的單詞一起使用。

[^\W\s]+\.+[^\s\W)]+

給定字符串:

  ,DECODE(T3.ATEST,' ',T3.BATEST
                           ,DECODE(NVL(T4.BATEST,'9') 
                                 ,'1',NVL(T4.BATEST,' ')
                                     ,T3.BATEST))      

它匹配以下內容:

T3.ATEST
T3.BATEST
T4.BATEST
T4.BATEST
T3.BATEST

現在嘗試上面沒有點的正則表達式模式:

  ,DECODE(ATEST,' ',BATEST
                           ,DECODE(NVL(BATEST,'9') 
                                 ,'1',NVL(BATEST,' ')
                                     ,BATEST))      

我需要一個下面還有 output 的正則表達式:

ATEST
BATEST
BATEST
BATEST
BATEST

是否可以選擇匹配點之間的單詞?

感謝您的幫助。

您可以使用

/(?:\w+\()+|\b(\w+(?:\.\w+)?)\b(?!')/g

如果您的 JavaScript 環境支持 ECMAScript 2018+,您可以使用

/(?:\w+\()+|(?<!')\b(\w+(?:\.\w+)?)\b(?!')/g

請參閱正則表達式演示 #1正則表達式演示 #2 詳情

  • (?:\w+\()+ - 匹配一個或多個單詞字符的一個或多個序列,然后( char
  • | - 或者
  • \b - 匹配單詞邊界
  • (?<!') - '不允許緊跟在當前位置的左邊
  • (\w+(?:\.\w+)?) - 第 1 組:一個或多個單詞字符,然后可選地出現一個. 然后是一個或多個單詞字符
  • \b - 單詞邊界
  • (?!') - 不跟'字符。

請參閱 JavaScript 演示:

 const text = ",DECODE(T3.ATEST,' ',T3.BATEST\n,DECODE(NVL(T4.BATEST,'9')\n,'1',NVL(T4.BATEST,' '),T3.BATEST)),DECODE(ATEST,' ',BATEST,DECODE(NVL(BATEST,'9'),'1',NVL(BATEST,' '),BATEST))"; const regex = /(?:\w+\()+|\b(\w+(?:\.\w+)?)\b(?;')/g, let results=[];m. while(m = regex.exec(text)) { if (m[1];== undefined) { results.push(m[1]); } } console.log(results);

如果您的 JavaScript 環境支持matchAll

 const text = ",DECODE(T3.ATEST,' ',T3.BATEST\n,DECODE(NVL(T4.BATEST,'9')\n,'1',NVL(T4.BATEST,' '),T3.BATEST)),DECODE(ATEST,' ',BATEST,DECODE(NVL(BATEST,'9'),'1',NVL(BATEST,' '),BATEST))"; const regex = /(?:\w+\()+|\b(\w+(?:\.\w+)?)\b(?;')/g. const results = Array.from(text,matchAll(regex). x => x[1]);filter(x =>.;x); console.log(results);

暫無
暫無

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

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