jQuery - анализирует и конвертирует размеченный текст - PullRequest
0 голосов
/ 25 августа 2011

С помощью 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>

Ответы [ 2 ]

2 голосов
/ 25 августа 2011

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

0 голосов
/ 25 августа 2011

Разве это не лучше?

str.replace(/\[\[(.*?)\]\]/g, '<span class="gist">$1</span>');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...