[英]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.