2017-04-11 38 views
0

作爲最近移至JS的python程序員,我使用了一個名爲 'parse'https://pypi.python.org/pypi/parse/1.8.0的庫。 您提供了一個字符串模板,以及實際的字符串,它會返回您想要的數據。例如:使用給定格式從字符串中提取數據

parse("It's {}, I love it!", "It's spam, I love it!") 

將返回spam

我已經從這個找JS解決這個問題,而且我找不到任何,除了: How can I extract data from a string using another string as a template?

我已經嘗試了這一點,但它並沒有工作非常出色。 預先感謝您,GoldPython

+0

爲什麼它的工作不是很好?告訴我們你試過的東西 – Weedoze

+0

你應該能夠用正則表達式實現你想要的東西 – Pineda

+0

Regexp呢? – Peter

回答

0

您可以通過使用RegExp來實現此目的。

首先,你需要轉義具有特殊含義的正則表達式的字符:

var toMatch = "I don't understand it, but: It's spam, I love it! I really really love it!"; 
var pattern = "It's {}, I love {}!"; 

function pythonParse(pattern, toMatch, bShortest) { 
    pattern = pattern.replace(/\\/g,"\\\\"); 
    pattern = pattern.replace(/\$/g, "\\$"); 
    pattern = pattern.replace(/\^/g, "\\^"); 
    pattern = pattern.replace(/\(/g, "\\("); 
    pattern = pattern.replace(/\)/g, "\\)"); 
    pattern = pattern.replace(/\[/g, "\\["); 
    pattern = pattern.replace(/\]/g, "\\]"); 
    pattern = pattern.replace(/\%/g, "\\%"); 
    pattern = pattern.replace(/\?/g, "\\?"); 
    pattern = pattern.replace(/\:/g, "\\:"); 
    pattern = pattern.replace(/\//g, "\\/"); 
    pattern = pattern.replace(/\*/g, "\\*"); 
    pattern = pattern.replace(/\./g, "\\."); 
    pattern = pattern.replace(/\+/g, "\\+"); 
    pattern = pattern.replace(/\|/g, "\\|"); 

    var lazy = ""; 
    if(bShortest) 
    lazy = "?"; 

    // Replace the parse pattern {} with (.*) regex pattern 
    pattern = pattern.replace(/\{\}/g, "(.*" + lazy + ")"); 

    // Then you can use this pattern to retrieve the result 
    var matches = toMatch.match(new RegExp(pattern)); 
    // Count results 
    if(!matches) 
    return ""; 
    if(matches.length > 2) { 
    matches.shift(); 
    return matches; 
    } 
    else 
    return matches[1]; 
} 

var result = pythonParse(pattern, toMatch, true); 
console.log(result); 

請看這裏工作的例子:http://jsbin.com/vuluca/edit?js,console

編輯以允許使用可選bShortest布爾參數懶比較。

相關問題