2 回答
TA貢獻1872條經(jīng)驗 獲得超4個贊
你需要
刪除您擁有的捕獲組并在整個模式周圍添加捕獲括號。您需要使用您的搜索模式進行拆分,因此
split如果它被捕獲,它將被添加到結(jié)果數(shù)組中:“如果分隔符是包含捕獲括號 () 的正則表達式,則匹配的結(jié)果將包含在數(shù)組中。 ”使用懶惰的
.,.*?,而不是貪婪的.*。否則,{{.*}}將匹配,然后盡可能多{{地匹配除換行符之外的任何 0 個或更多字符,然后,因此介于和之間的所有子字符串將被放入一個匹配項中。}}{{...}}{{}}
JS固定演示:
let str = "hy my name is: {{ name }} and i am {{ age }} old";
let vars = str.split(/({{.*?}})/);
console.log(vars);
// => [ "hy my name is: ", "{{ name }}", " and i am ", "{{ age }}", " old"]
請注意,僅當內(nèi)部有數(shù)字時,{和才是特殊的,例如. 在中,花括號不能被解析為限制量詞,因為沒有數(shù)字,因此,您可以轉(zhuǎn)義字符以防止出現(xiàn)任何歧義。}{6}{{.*?}}{
此外,如果您在字符串的開頭有一個匹配項,則結(jié)果數(shù)組中將有一個空元素,那么您需要刪除空元素:
str.split(/({{.*?}})/).filter(Boolean)TA貢獻1790條經(jīng)驗 獲得超9個贊
而不是split,你可以使用這個正則表達式match:
/{{.*?}}|.+?(?={{|$)/g
代碼:
let str = "hy my name is: {{ name }} and i am {{ age }} old";
let vars = str.match(/{{.*?}}|.+?(?={{|$)/g);
console.log(vars);
正則表達式詳細信息:
{{.*?}}: 匹配一個字符串{{...}}|: 要么.+?:匹配滿足下一個先行條件的任何字符的 1+(?={{|$):確保我們{{在下一個位置有枯萎或行尾的積極前瞻條件
添加回答
舉報
