我有功能在冒号之前加粗部分行。
//Fast regex (time: 0)
var colonRegex = /^[^*:\n]+:/gm;
和
//Slow regex (time: 139) Limit by 10 words
//var colonRegex = /^([^*:\n ]+ ?){1,10}:/gm;
// I have issue with it when I want to apply replace to tens of divs (it freezes chrome)
var bolded = str.replace(colonRegex, function(match) {
return "<b>"+match+"</b>";
});
你可以在jsfiddle:http://jsfiddle.net/damg7zuk/4/
上测试它我在哪里犯了错误? 我可以在回调中限制字数。 在正则表达式本身可以做得更好吗? 谢谢你的伎俩。
答案 0 :(得分:2)
您的/^([^*:\n ]+ ?){1,10}:/gm
正则表达式展示catastrophic backtracking:您将+
和{1,10}
重复嵌套在(可能)之间。通过使分隔组的空白必须匹配来解决此问题:
/^([^*:\n ]+ ){0,9}[^*:\n ]+:/gm
# ^
或
/^[^*:\n ]+( [^*:\n ]+){0,9}:/gm
答案 1 :(得分:1)
js等级可以这样:
var bolded = str.replace(colonRegex, function(match) {
if (match.indexOf(".") > 0){
match1 = match.slice(0,(match.indexOf(".")+1));
match2 = match.slice(match.indexOf(".")+1);
match = match1+"<b>"+match2+"</b>";
return match;
}
return "<b>"+match+"</b>";
});
答案 2 :(得分:0)