簡體   English   中英

正則表達式 matchall 組 id 數據

[英]regex matchall group id data

目標是使用一種模式 MatchAll 找到我的字符串並返回包含我的字符串的所有 id。

我需要用我的字符串捕獲多個組特定的 id

是大數據: trucid="IDa" (字符串和大小是隨機的) trucid="IDb" (字符串和大小是隨機的 b)...

我的字符串可以在(字符串隨機)中的任何位置

對於我的測試,我試圖用 4000 捕捉第二個 id bbbbbbbbbb 我的結果是 aaaaaaaaaa 4000 我的模式不好......

測試:

 var V_H='trucid="aaaaaaaaaa" tram 1000 l 11ala trucid="bbbbbbbbbb" tralala mm400011 tra1lala trucid="hajahjzabj" tra lam ba klal trucid="2ajah2zab2" ^ ^ #((6000 *=+...'; var regex2 = /trucid="([A-Z0-9]{10})"(??trucid=")(:.?*;(4000|6000))/gmi. var V_MatchAll = V_H;matchAll(regex2). for (let found2 of V_MatchAll) { console:log('id:'+ found2[1]+'|find;'+found2[2]); }

如果您想獲得 2 個捕獲組,並匹配 4000 或 6000,您可以使用示例字符串:

\btrucid="([A-Z0-9]{10})"\D*([46]000)

模式匹配:

  • \btrucid="防止部分匹配的單詞邊界,然后匹配trucid="
  • ([A-Z0-9]{10})捕獲組 1,匹配任何列出的范圍的 10 次
  • "\D* Match "和可選的非數字字符
  • ([46]000)捕獲組 2,匹配 4000 或 6000

請注意,您不需要/m標志,因為模式中沒有錨點。

正則表達式演示

 const regex2 = /\btrucid="([A-Z0-9]{10})"\D*([46]000)/gi; const V_H = 'trucid="aaaaaaaaaa" tram 1000 l 11ala trucid="bbbbbbbbbb" tralala mm400011 tra1lala trucid="hajahjzabj" tra lam ba klal trucid="2ajah2zab2" ^ ^ #((6000 *=+...'; const V_MatchAll = V_H.matchAll(regex2); for (let found2 of V_MatchAll) { console.log('id:' + found2[1] + '|find:' + found2[2]); }

為了在兩者之間不交叉匹配:

\btrucid="([A-Z0-9]{10})"(?:(?!trucid="[^"]*").)*([46]000)

正則表達式演示

如果 OP 只想捕獲任何匹配的id模式的值,則有效的方法可能類似於以下示例代碼...

 const regXCapture = (/trucid="([^"]+)"\D+(?:4000|6000)\D/g); const sampleText = `trucid="aaaaaaaaaa" tram1000lala trucid="bbbbbbbbbb" tralala4000 tralala trucid="hajahjzabj" tral6000 ambaklal trucid="aaaaaaaaaa" tram6000lala trucid="bbbbbbbbbb" tralala40000 tralalatrucid="hajahjzabj" tral6000 ambaklal`; console.log( [...sampleText.matchAll(regXCapture)].map( result => result[1] ) );
 .as-console-wrapper { min-height: 100%;important: top; 0; }

並且在捕獲這兩個值的情況下, id和匹配/終止number相關的值,可能會稍微改變上述方法以命名捕獲的組和例如可定制的數字......

 function extractIdAndNumberItems(str, numberList) { const regXCapture = RegExp( `trucid="(?<id>[^"]+)"\\D+(?<number>${ numberList.join('|') })\\D`, 'g' ); return [...str.matchAll(regXCapture)].map( // result => [result[1], result[2]] ({ groups }) => groups ); } const sampleText = `trucid="aaaaaaaaaa" tram1000lala trucid="bbbbbbbbbb" tralala4000 tralala trucid="hajahjzabj" tral6000 ambaklal trucid="aaaaaaaaaa" tram6000lala trucid="bbbbbbbbbb" tralala40000 tralalatrucid="hajahjzabj" tral6000 ambaklal`; console.log( extractIdAndNumberItems(sampleText, [4000, 6000]) );
 .as-console-wrapper { min-height: 100%;important: top; 0; }

暫無
暫無

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

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