亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過正則表達式匹配拆分字符串

通過正則表達式匹配拆分字符串

智慧大石 2022-12-22 13:07:03
我有以下問題。我嘗試根據正則表達式拆分字符串。我想將其拆分{{ name }},{{ age }}依此類推。預期輸出應如下所示:["hy my name is: ", "{{ name }}", " and i am ", "{{ age }}", " old"]我目前的嘗試是這樣的:let str = "hy my name is: {{ name }} and i am {{ age }} old";let vars = str.split(/({{)(.*)(}})/);console.log(vars);
查看完整描述

2 回答

?
守著一只汪

TA貢獻1872條經驗 獲得超4個贊

你需要

  • 刪除您擁有的捕獲組并在整個模式周圍添加捕獲括號。您需要使用您的搜索模式進行拆分,因此split如果它被捕獲,它將被添加到結果數組中:如果分隔符是包含捕獲括號 () 的正則表達式,則匹配的結果將包含在數組中。 ”

  • 使用懶惰的..*?,而不是貪婪的.*。否則,{{.*}}將匹配,然后盡可能{{地匹配除換行符之外的任何 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"]

請注意,僅當內部有數字時,{和才是特殊的,例如. 在中,花括號不能被解析為限制量詞,因為沒有數字,因此,您可以轉義字符以防止出現任何歧義。}{6}{{.*?}}{

此外,如果您在字符串的開頭有一個匹配項,則結果數組中將有一個空元素,那么您需要刪除空元素:

str.split(/({{.*?}})/).filter(Boolean)


查看完整回答
反對 回復 2022-12-22
?
富國滬深

TA貢獻1790條經驗 獲得超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+

  • (?={{|$):確保我們{{在下一個位置有枯萎或行尾的積極前瞻條件


查看完整回答
反對 回復 2022-12-22
  • 2 回答
  • 0 關注
  • 125 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號