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)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+(?={{|$):确保我们{{在下一个位置有枯萎或行尾的积极前瞻条件
添加回答
举报
