2017-03-06 26 views
0

我輸入的字符串看起來是這樣的:正則表達式沒有得到整個串

&hello=HI1&op=1h23&hello=&op=&hello=HI3&op=&hello=HI4&op=OP4 

如果您好有文字,我想捕獲的數據。 op參數是可選的,可能有也可能沒有值。在上面的字符串,我想下面的輸出(每行會被存儲爲單獨的值的陣列):

hello=HI&op=1h23 
hello=HI3&op= 
hello=HI4&op=OP4 

我知道了大多的工作,但問題是如果op具有帶有值單詞'hello'中的任何字母,其餘部分不會被捕獲。正如您在上面的示例字符串中看到的,第一個op值是1h23,在h之後,值23未被捕獲。

https://regex101.com/r/Er0kEo/2

我已經試過:

/&hello=[A-z 0-9]+&op=[^&hello]*/gi 

這主要工作,但如果op有任何包含在單詞「你好」字母的值。我也試過:

/&hello=[A-z 0-9]+&op=.+?(?=&hello)/gi 

只捕獲第一個輸入。還嘗試過(?!& hello) - 稍微好一些,但不會捕獲最後一次輸入。用\ b試過並沒有太遠,也沒有做過^ & hello $。

我覺得我錯過了一些小小的東西,但是5個小時後,我被打敗了。

+0

這是否意味着所有的按鍵是相同的'hello'?所有值中是否存在&op?你只需要提取在'&op'之前有一些文本的文件? –

+0

查看https://jsfiddle.net/jqu5motj/1/,是否按預期工作? –

+0

@WiktorStribiżew:是的,那很完美!它非常簡單,有點震驚,我無法弄清楚/沒有嘗試[^&] *。謝謝! – greentea

回答

0

具有以下正則表達式嘗試(使用positive look-ahead

hello=[a-z0-9]+&op=[^&]* 

DEMO

的JavaScript

var str = "&hello=HI1&op=1h23&hello=&op=&hello=HI3&op=&hello=HI4&op=OP4"; 
 
var result = str.match(/hello=[a-z0-9]+&op=[^&]*/gi); 
 
console.log(result);

+0

['[A-Z]'比字母更匹配](http://stackoverflow.com/a/29771926/3832970),但我認爲它在這裏並不那麼重要。什麼是相關的,是OP預計沒有領先的'&'結果。另外,如果將它與'[^&] *'進行比較,'。*?(?=&| $)'是一種「矯枉過正」。 –

+0

當我這樣做時,我肯定會。 –

0

使用正則表達式/&(hello=\w*&op=\w*)/,將爲下列要求的匹配:

hello=HI&op=1h23 
hello=HI3&op= 
hello=HI4&op=OP4 

JavaScript的演示

var pattern = /&(hello=\w*&op=\w*)/g; 
 

 
var str = "&hello=HI1&op=1h23&hello=&op=&hello=HI3&op=&hello=HI4&op=OP4"; 
 

 
var result; 
 

 
while (result = pattern.exec(str)) { 
 
    console.log(result[1]); 
 
}

0
/hello=[a-z\s0-9]+&op=[a-z0-9]*/gi 

結果

Match 1 
Full match 1-18 `hello=HI1&op=1h23` 
Match 2 
Full match 30-43 `hello=HI3&op=` 
Match 3 
Full match 44-60 `hello=HI4&op=OP4` 

https://regex101.com/r/Er0kEo/3