2016-10-09 38 views
-1

如何從下面的模式捕獲水果,因爲它不包含 裏面的芒果或葡萄?如何找到塊內除了兩個案例

輸入:

<frutis>banana,apple,orrange,lichie</frutis> 
<frutis>banana,apple,mango,lichie</frutis> 
<frutis>banana,grapes,orrange,lichie</frutis> 
<frutis>banana,apple,orrange,guava</frutis> 

輸出: 香蕉,蘋果,orrange,lichie 假 假 香蕉,蘋果,orrange,番石榴<

我曾嘗試以下:

<frutis>([^mango|grapes]*)<\/frutis> 

回答

0

試試這個:

<frutis>((?:(?!mango|grapes).)*)<\/frutis> 

源代碼在這裏:

const regex = /<frutis>((?:(?!mango|grapes).)*)<\/frutis>/g; 
const str = `<frutis>banana,apple,orrange,lichie</frutis> 
<frutis>banana,apple,mango,lichie</frutis> 
<frutis>banana,grapes,orrange,lichie</frutis> 
<frutis>banana,apple,orrange,guava</frutis>`; 
let m; 

while ((m = regex.exec(str)) !== null) { 
    // This is necessary to avoid infinite loops with zero-width matches 
    if (m.index === regex.lastIndex) { 
     regex.lastIndex++; 
    } 

    // The result can be accessed through the `m`-variable. 
    m.forEach((match, groupIndex) => { 
     console.log(`Found match, group ${groupIndex}: ${match}`); 
    }); 
} 

我已經提前用負面看,以檢測是否存在或不是兩個字符串。 完整的解釋可以發現here

+0

這是如何工作的?你可以解釋嗎 ? –

+0

手錶,我編輯了答案 –

+0

謝謝它的作品 –

1

你可以使用負前瞻,喜歡用正則表達式:

<frutis>(?!.*mango)(?!.*grapes).*<\/frutis> 

當你寫的,這是行不通的,因爲類[.....]即將匹配單個字符,而不是序列。此外,管道符號在課程中沒有特殊含義,它只是表示文字|

注意:爲了匹配XML結構中的數據,建議不要使用正則表達式,而是使用DOM解析器。

相關問題