使用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>
答案 0 :(得分:2)
只需使用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>
。由于[
和]
都是正则表达式中的特殊字符,因此必须使用反斜杠(\
)进行转义,并且我们希望替换为全局(例如:替换多个实例) ),它给了我们:/\[\[/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('');
我不保证这个状态机在所有情况下都能正常工作,但它适用于您的测试字符串。
答案 1 :(得分:-1)
那不是更好吗?
str.replace(/\[\[(.*?)\]\]/g, '<span class="gist">$1</span>');