计算BBcode的出现次数

时间:2011-07-15 15:11:09

标签: javascript regex

我想计算BB代码的出现次数(例如: [b] [/ b] )。
我试过了

(str.match(/\[b\]/g)  str.match(/\[\/b\]/g))

这些都不起作用,请帮助!!!

Edit

document.getElementById('textarea').value = 'HIiiiiiiiiiii [b]BOld[/b]';
var str = document.getElementById('textarea').value;

答案:

if (str.match(/\[b\]/g).length ==  str.match(/\[\/b\]/g)).length) {alert("Fine");}

2 个答案:

答案 0 :(得分:2)

此正则表达式将匹配BB代码开头标记:

str.match(/\[[a-z]*\]/g)

编辑:这里有一些代码可以完全满足您的需求,包括创建列出所有缺失结束标记的错误数组。此代码使用underscore库进行groupBy()调用。

jsFiddle

var bbcode = 'HI[i]iii[i]iii[/i]iii [b]BOld[/b] yahhh [img]url[/img]';
var matches = bbcode.match(/\[[a-z]*\]/g); //get the matches

var tags = _.groupBy(matches, function(val) {
    val = val.substring(1, val.length-1);
    return val;
});

var errors = [];

for (var tag in tags) {
    var regex = '\\\[/' + tag + '\\\]'; 
    if (bbcode.match(regex).length != tags[tag].length) {
        errors.push('Missing a closing [/' + tag + '] tag');
    } 
}

console.log(errors);

答案 1 :(得分:1)

更换出现,直到没有;跟踪路上的金额:

var regexp = /\[[a-z]\](.*?)\[\/[a-z]\]/i;
var str = "test [b]a[/b] test [i]b[/i] [b]d[/b] c";
var newstr = str;
var i = 0;
while(regexp.test(newstr)) {
    newstr = newstr.replace(regexp, "");
    i++;
}
alert(i); // alerts 3