jQuery - Parse &转换标记文本

jQuery - Parse & convert markedup text

本文关键字:文本 转换 Parse jQuery      更新时间:2023-09-26

使用jQuery如何转换此文本

The quick]] brown [[fox]] jumps over the lazy [[dogs [[back]]

The quick]] brown <span class="gist">fox</span> jumps over the lazy <span class="gist">dogs [[back</span>

?

使用javascript:

var string = "The quick brown [[fox]] jumps over the lazy [[dogs back]]"
string = string.replace(/'['[/g, '<span class="gist">').replace(/']']/g, '</span>');

这是使用正则表达式查找[[并将其替换为<span class="gist">,然后查找]]并将其替换为</span>。因为[]都是regex中的特殊字符,它们必须用反斜杠转义('),并且我们希望替换是全局的(例如:替换多个实例),这给了我们:/'['[/g/']']/g


如果您需要处理未闭括号,则必须使用不同的方法,例如状态机:

var string = "The quick]] brown [[fox]] jumps over the lazy [[dogs [[back]]";
var state = 'NO_TAG';
var parts = [];
for(var i = 0; i < string.length; i += 1) {
    if(string[i] === "[" && string[i+1] === "[" && state === 'NO_TAG') {
        parts.push('<span class="gist">');
        i += 1;
        state = 'TAG';
    } else if (state === 'TAG' && string[i] === "[" && string[i+1] === "[") {
        i += 1; // ignore start brackets if we are in a tag.
    } else if (state === 'TAG' && string[i] === "]" && string[i+1] === "]") {
        parts.push('</span>');
        i += 1;
        state = 'NO_TAG';
    } else if (state === 'NO_TAG' && string[i] === ']' && string[i+1] === ']') {
        i += 1; // ignore end brackets if we are not in a tag.
    } else {
        parts.push(string[i]);
    }
}
string = parts.join('');

我不能保证这个状态机在所有情况下都能工作,但它可以与您的测试字符串一起工作。

这样不是更好吗?

str.replace(/'['[(.*?)']']/g, '<span class="gist">$1</span>');