我有以下案例
输入
var str = '{{repeat 2}} some string {{/repeat}}';
输出
str = 'some string, some string';
输入
var str = '{{repeat 2}}{"prop1":"some data"}{{/repeat}}';
输出
str = '{"prop1":"some data"}, {"prop1":"some data"}';
输入
var str = 'start of string {{repeat 2}} some string {{/repeat}} another string ';
输出
str = 'start of string some string, some string another string';
我想这样做
var test = "{{repeat 5}} test this string {{/repeat}}";
var arrStr = test.split(/[{{]/);
并通过循环arrStr
还有其他好办法吗?如何在重复中找到重复计数和字符串的重复?
答案 0 :(得分:1)
String.prototype.repeat()
可能是你感兴趣的。
因为它只是重复没有逗号的字符串,所以下面也会为你做这个:
function repeatString(s, count) {
return (s + ", ").repeat(count).replace(/,\s$/, "");
}
现在你可以像
那样使用它
function repeatString(s, count) {
return (s + ", ").repeat(count).replace(/,\s$/, "");
}
var s = "some string";
var res = "start of string " + repeatString(s, 2) + " other string";
console.log(res);

请注意,在撰写本文时,所有浏览器都不支持repeat()
,但您可以使用Polyfill
如果你从html中得到你的字符串或者已经有{{repeat ...}}的字符串,那么下面就可以了:
function repeatString(s) {
var count = s.match(/\{\{repeat\s(\d*)\}\}/)[1];
return (s.replace(/\{\{repeat\s\d*\}\}\s(.*)\s\{\{\/repeat\}\}/, "$1") + ", ").repeat(count).replace(/,\s$/, "");
}
var s = "{{repeat 5}} some string {{/repeat}}";
var res = "start of string " + repeatString(s) + " other string";
console.log(res);

值得一提的是,有许多html模板引擎已经可用作开源项目。在大多数情况下,使用其中一个而不是重新发明轮子是一个好主意。
答案 1 :(得分:1)
您可以替换替换回调中的文本:
JSON.print()
function fillArray(s, num) {
var arr = [];
for (var i=0; i<num; i++) {
arr.push(s);
}
return arr;
}
var str = 'start of string {{repeat 2}} some string {{/repeat}} another string ';
var res = str.replace(/{{repeat\s+(\d+)}}([\s\S]*?){{\/repeat}}/g, function($0, $1, $2) {
return fillArray($2.trim(), parseInt($1, 10)).join(", ");
});
console.log(res);
函数创建一个数组,其中包含必要数量的提取字符串出现次数。
获得所需内容的正则表达式
fillArray
<强>详情:
/{{repeat\s+(\d+)}}([\s\S]*?){{\/repeat}}/g
- 文字字符序列{{repeat
- 1+空格\s+
- 第1组:一个或多个数字(\d+)
- 文字}}
}}
- 第2组,任意0个字符,尽可能少到第一个([\s\S]*?)
- 文字{{\/repeat}}
。