2017-08-31 51 views
1

我需要找到MyValueA在引號和MyValueB內引號。我的問題是,有時順序改變,比我的正則表達式找不到任何東西。JS RegEx找不到表達式

有人在那裏如何知道一個正則表達式來找到我的價值觀? 爲MyValueA和MyValueB運行兩個正則表達式也是可以的。

變式甲

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({ 
 
     StuffValue : 'Foo Blaaaa', 
 
     MyValueA : './selector.template.abc', 
 
    \t MyValueB : ['./selector.styleA.gpp', './selector.styleB.gpp'] 
 

 
    }) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt

變式乙

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({ 
 
     StuffValue : 'Foo Blaaaa', 
 
     MyValueA 
 
         : './selector.template.abc', 
 
    \t MyValueB : ['./selector.styleA.gpp', 
 
        './selector.styleB.gpp'] 
 

 
    }) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt

變式Ç

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({ 
 
     StuffValue : 'Foo Blaaaa', MyValueA : './selector.template.abc', MyValueB : ['./selector.styleA.gpp', './selector.styleB.gpp'] 
 

 
    }) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt

感謝您的任何想法:)

+0

我需要finde ** MyValueA **和** _值在引號_ **和** MyValueB **和引用標記** **中的值_ –

+0

JavaScript中的語法錯誤。修復它,然後回到我們身邊。 – PHPglue

+0

我認爲它應該是純文本,他想運行一個正則表達式,而不是工作的JavaScript代碼。 –

回答

0

正則表達式來找到報價的內容是'(((?!').)*)'。 在開始時添加一點點可讓您搜索MyValueA

MyValueA\s*:\s*'(((?!').)*)' 

爲MyValueB和其他人重複。

請注意,您需要提取其中一個匹配的組以確定字符串的實際內容。

1

我建議不要使用正則表達式來解析像這樣的複雜數據結構 - 它充滿了陷阱,像轉義字符一樣。如果你真的想這樣做,這段代碼通過使用\ s *來代表空白,並在內容上進行「懶惰」匹配以避免一次性抓取太多 - (。*?)。

const plaintext1 = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({ 
 
     StuffValue : 'Foo Blaaaa', 
 
     MyValueA : './selector.template.abc', 
 
    \t MyValueB : ['./selector.styleA.gpp', './selector.styleB.gpp'] 
 

 
    }) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt`; 
 
    
 
const plaintext2 = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({ 
 
     StuffValue : 'Foo Blaaaa', 
 
     MyValueA 
 
         : './selector.template.abc', 
 
    \t MyValueB : ['./selector.styleA.gpp', 
 
        './selector.styleB.gpp'] 
 

 
    }) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt`; 
 

 
const plaintext3 = `Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ({ 
 
     StuffValue : 'Foo Blaaaa', MyValueA : './selector.template.abc', MyValueB : ['./selector.styleA.gpp', './selector.styleB.gpp'] 
 

 
    }) Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt`; 
 

 
const regexA = /MyValueA\s*:\s*'(.*?)'/; 
 
const regexB = /MyValueB\s*:\s*\[\s*'(.*?)'\s*,\s*'(.*?)'\s*\]/; 
 

 
console.log(regexA.exec(plaintext1)[1]); 
 
console.log(regexA.exec(plaintext2)[1]); 
 
console.log(regexA.exec(plaintext3)[1]); 
 

 
console.log(regexB.exec(plaintext1)[1]); 
 
console.log(regexB.exec(plaintext1)[2]); 
 

 
console.log(regexB.exec(plaintext2)[1]); 
 
console.log(regexB.exec(plaintext2)[2]); 
 

 
console.log(regexB.exec(plaintext3)[1]); 
 
console.log(regexB.exec(plaintext3)[2]);

你可以從你的文字與strippedPlaintext1 = plaintext1.replace第一剝出空白簡化正則表達式(/ \ s/g的, 「」);但是這可能會擺脫你想要的空間。

一個可取的方法是以某種方式從文本中過濾出數據,然後使用類似JSON.parse()的東西來封裝到JavaScript對象中。