获取字符串中字符的索引以进行插值
Get indices of characters in string for interpolation
我已经创建了一个方法,给定一个字符串将找到与特定模式相关的所有插值点 some string {{point}}
这是可行的,但它不是很优雅,我想知道是否有人知道更简洁的这样做的方式?
这是我的方法:
_interoplationPoints: function(string){
var startReg = /{{/gi,
endReg = /}}/gi,
indices = {start: [],end: []},
match;
while (match = startReg.exec(string)) indices.start.push(match.index);
while (match = endReg.exec(string)) indices.end.push(match.index);
return indices;
},
给定一个字符串,它将检查所有起点和终点 {{
& }}
然后它将 return 一个对象,其中包含每次出现的起点和终点 {{}}
.
我这样做的原因是我稍后会 substring()
这些具有相关价值的索引。
没那么简单,但是:
_interoplationPoints: function(string){
var reg = /{{[^}]*}}/gi,
indices = {start: [],end: []},
match;
while (match = reg.exec(string)) {
indices.start.push(match.index);
indices.end.push(match.index + match[0].length - 2);
}
return indices;
},
此正则表达式匹配 {{
后跟不包含右大括号的任意长度的表达式 [^}]*
后跟 }}
。结束索引是通过添加匹配的长度(这将使它刚好超过第二个右大括号)然后减去 2 来计算的,因为有两个右大括号。
我已经创建了一个方法,给定一个字符串将找到与特定模式相关的所有插值点 some string {{point}}
这是可行的,但它不是很优雅,我想知道是否有人知道更简洁的这样做的方式?
这是我的方法:
_interoplationPoints: function(string){
var startReg = /{{/gi,
endReg = /}}/gi,
indices = {start: [],end: []},
match;
while (match = startReg.exec(string)) indices.start.push(match.index);
while (match = endReg.exec(string)) indices.end.push(match.index);
return indices;
},
给定一个字符串,它将检查所有起点和终点 {{
& }}
然后它将 return 一个对象,其中包含每次出现的起点和终点 {{}}
.
我这样做的原因是我稍后会 substring()
这些具有相关价值的索引。
没那么简单,但是:
_interoplationPoints: function(string){
var reg = /{{[^}]*}}/gi,
indices = {start: [],end: []},
match;
while (match = reg.exec(string)) {
indices.start.push(match.index);
indices.end.push(match.index + match[0].length - 2);
}
return indices;
},
此正则表达式匹配 {{
后跟不包含右大括号的任意长度的表达式 [^}]*
后跟 }}
。结束索引是通过添加匹配的长度(这将使它刚好超过第二个右大括号)然后减去 2 来计算的,因为有两个右大括号。