鍍金池/ 問(wèn)答/人工智能  Java  C++  HTML/ 字符串模板與變量提取

字符串模板與變量提取

現(xiàn)給定一個(gè)原始字符串,例子: abcdefgh ,一個(gè)模板規(guī)則,例子: ab{{}}de{{}}h

其中 {{}} 代表任意匹配,且一個(gè)模板內(nèi)可能存在0個(gè)或多個(gè){{}},要求編寫(xiě)一個(gè)函數(shù)先進(jìn)行模板匹配, 如果符合原始字符串符合模板規(guī)則,則進(jìn)行變量提取,例子的結(jié)果為 ["c", fg"]的數(shù)組

function (str string, temp string) (bool, []string) {
    // 先判斷 str是否符合temp的規(guī)則,不符合則返回false
    // 比如 abcdefgh 就滿足 ab{{}}de{{}}h,但是 abcdefghi 就不滿足ab{{}}de{{}}h,因?yàn)槎嗔藗€(gè)字符i
    
    // 如果符合則進(jìn)行變量提取
}

我想了下,可以用正則,也可以用字符的split,對(duì)于一個(gè)變量符號(hào)都是很好解決的,但是對(duì)于多個(gè)變量符號(hào),全文匹配就會(huì)失敗,特前來(lái)請(qǐng)教

回答
編輯回答
嘟尛嘴

其實(shí)也簡(jiǎn)單,將你的自定義模板在方法內(nèi)轉(zhuǎn)換為等價(jià)的正則表達(dá)式,然后再匹配不就可以了。

2018年1月16日 05:08
編輯回答
情殺
function tempMatch(str, temp) {
    temp = "^" + temp.replace(/{{}}/g, "(.+?)") + "$";
    let matchs = str.match(temp), result = [];
    for (let i = 1; i< matchs.length; i ++) {
        result.push(matchs[i]);
    }
    return result;
}
2017年5月31日 01:38