簡體   English   中英

正則表達式匹配匹配集之后的所有內容(匹配集除外)

[英]Regex match everything after match set except for match set

這可能是一個簡單的表達方式,但與此同時我卻經歷了最艱難的時光。 我需要匹配每個組有2個部分的組集,我們可以稱其為操作和值。 除了另一個操作,我需要該值匹配任何操作之后的值。

要匹配的有效運算符(標准數學運算符): [>,<,=,!,....]

例如: '>=25!30<50'將導致三個匹配組:

1. (>=, 25) 2. (!, 30) 3. (<, 50)

我目前可以使用: /(>=|<=|>|<|!|=)(\\d*)/g上述問題,但這僅在第二個匹配集中的字符為數字時才有效。

我遇到的那堵牆是如何為指定操作員匹配除“除”之后的所有內容。

例如,我不知道如何解決: '<=2017-01-01'而不編寫正則表達式來指定我允許的每個字符(除運算符外的任何字符),而且看起來不像正確的解決方案。

必須有一種方法可以做到這一點! 多謝你們。

我認為這是您需要的:

/((?:>=|<=|>|<|!|=)[^>=<!]+)/g

^排除您不需要的字符,+表示任意數量的

您可以使用此代碼

var str = ">=25!30<50";
var pattern = RegExp(/(?:([\<\>\=\!]{1,2})(\d+))/, "g");
var output = [];
let matchs = null;


while((matchs = pattern.exec(str)) != null) {

    output.push([matchs[1], matchs[2]]);
}

console.log(output);

輸出數組:

0: Array [ ">=", "25" ]
​
1: Array [ "!", "30" ]
​
2: Array [ "<", "50" ]

您可能要做的是匹配操作(>=|<=|>|<|!|=) ,這將是2部分中的第一個,並且在捕獲組中使用負前瞻進行匹配,而沒有直接操作在右側,這將是兩個部分中的第二個。

(?:>=|<=|>|<|!|=)((?:(?!(?:>=|<=|>|<|!|=)).)+)

  • (?:>=|<=|>|<|!|=)使用交替匹配其中一項操作
  • (開始捕獲組(其中將包含您的值)
    • (?:啟動非捕獲組
      • (?!(?:>=|<=|>|<|!|=)). 斷言右邊的內容是否定的超前表示,不是運算且與任何字符匹配.
    • )+關閉非捕獲組並重復一次或多次
  • )關閉捕獲組

 const regex = /(?:>=|<=|>|<|!|=)((?:(?!(?:>=|<=|>|<|!|=)).)+)/gm; const strings = [ ">=25!30<50", ">=test!30<$@#%", "34" ]; let m; strings.forEach((s) => { while ((m = regex.exec(s)) !== null) { if (m.index === regex.lastIndex) { regex.lastIndex++; } console.log(m[1]); } }); 

暫無
暫無

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

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