2016-08-18 28 views
0

我需要在某些文本中匹配某種模式,但這種模式不應該有其他模式。 我在html中使用了一些組和html頁面不添加新行。而不是在HTML中添加新行
,所以我在這裏遇到麻煩。如何在正則表達式中正確排除組?

我嘗試使用這個表達式:

/\|([^\r\n|]+?(?!<br>))\|/igm 

和例子是:

test1 | test2 | test3<br>| test4<br>| test5 |<br>test6 

應選配僅| test2 |和組test2,但現在還可選配| test4<br>|和不對| test5 |。我需要排除test4匹配,但不知道如何將它與[]配合使用,因爲它忽略了(?!<br>)

P.S.當然| test2 |也可能是| text1 <span ...>text2</span> text3 |,因此將<>置入[]不是我需要的解決方案。

+0

請出示的示例串(具體例子),而不是令人費解的描述 –

+0

@CasimiretHippolyte,這是一個很好的例子。 1)我得到了我需要編輯的東西。 2)獲取innterHTML並將'.replace()'函數與該正則表達式應用。 問題是在某些情況下不應選擇。正如我所說的HTML包含'
',而不是'\ r \ n',我不能除了換行符,因爲
是一組4個字符,而不是一個。 – XCanG

+0

@XCanG:你的意思是'\ |(?:(?! )[^ \ r \ n |])* \ |'?看[這個正則表達式演示](https://regex101.com/r/fU2xF9/1)。 –

回答

0

您所需要的正則表達式應該基於一個tempered greedy token

/\|((?:(?!<br\s*\/?>)[^\r\n|])*)\|/gi 
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

regex demo

令牌是(?:(?!<br\s*\/?>)[^\r\n|])*,它比CR/LF/|(在[^\r\n|]否定之外的任何字符相匹配字符類佔),不是開始<br>標記序列(或<br ><br/><br />等) 與令牌ar匹配的內容e被捕獲到組#1中,因爲它被一個捕獲括號(...)包裹。

JS演示:

var re = /\|((?:(?!<br\s*\/?>)[^\r\n|])*)\|/ig; 
 
var str = 'test1 | test2 | test3<br>| test4<br>| test5 |<br>test6|'; 
 
var res = []; 
 
while ((m = re.exec(str)) !== null) { 
 
    res.push(m[1]); // Grab Group 1 value only 
 
} 
 
console.log(res);