Просто используйте 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('');
Iне будет гарантировать, что этот конечный автомат будет работать во всех случаях, но он работает с вашей тестовой строкой.