Как мне удалить эти теги с помощью JavaScript - PullRequest
0 голосов
/ 15 октября 2010

Я все еще изучаю регулярные выражения (очевидно), и я не могу понять это, и я хочу сделать это правильно, а не делать это долго.Как я могу:

Найти все <p> или </p> и заменить на \n, кроме первого <p> и последнего </p>, в этом случае заменить ничем, просто удалить и для <br>, <br /> и <br/> также заменить на \n.

На Regex ИЛИ что-нибудь еще.Я получаю это от возврата jQuery $ .get ().Поэтому, пожалуйста, не ругайте меня об этом, я просто не знаю, как это сделать.

Ответы [ 3 ]

0 голосов
/ 15 октября 2010

В перспективе Regex, чтобы первый <p> стал исключением, вы должны определить шаблон, который делает первый <p> неудачным.Например, если текст перед первым <p> равен abcxyz, то есть abcxyz<p>, то вы будете искать каждый <p>, которому не предшествует abcxyz, так что первый <p> не совпадает.Используя регулярное выражение, оно становится: (?<!abcxyz)<p>

Чтобы последнее </p> стало исключением, вы должны определить шаблон, который приводит к сбою последнего </p>.Например, если текст после последнего </p> равен abcxyz, то есть </p>abcxyz, тогда вы будете искать каждый </p>, за которым не следует abcxyz, так что последний </p> не совпадает.Используя регулярное выражение, оно становится: </p>(?!abcxyz)

Хотя JavaScript поддерживает положительный и отрицательный упреждающий просмотр , к сожалению, регулярное выражение JavaScript не поддерживает ни положительный, ни отрицательный просмотр назад .В самом деле, в JavaScript есть некоторые грязные приемы, имитирующие отстранение, однако не все отстающие конструкции можно имитировать.

Таким образом, если возможно, попытайтесь определить шаблон, которыйделает первый <p> неудачным, но использует отрицательный прогноз.

Чтобы заменить первый <p> и последний </p> ничем, вы можете инвертировать логику, которую мы использовали выше, и вы должнывыполните это в отдельном шаге.

Чтобы заменить <br>, <br />, <br/> на \n, найдите: <br\s*\/?> и замените на \n.

0 голосов
/ 15 октября 2010

Один из способов сделать это - позволить браузеру сделать это за вас.В IE и WebKit вы можете назначить свой HTML как innerHTML для <div> и получить его innerText.Однако это не сработает в Firefox или Opera.Вот немного странное использование объекта Selection, который сделает это:

function getInnerText(html) {
    var text = "";
    var div = document.createElement("div");
    div.innerHTML = html;

    document.body.appendChild(div);
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        sel.removeAllRanges();
        var range = document.createRange();
        range.selectNodeContents(div);
        sel.addRange(range);
        text = sel.toString();
        sel.removeAllRanges();
    } else if (document.body.createTextRange != "undefined") {
        var range = document.body.createTextRange();
        range.moveToElementText(div);
        text = range.text;
    }
    document.body.removeChild(div);
    return text.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
}
0 голосов
/ 15 октября 2010

Javascript имеет довольно приятные инструменты для работы с xml (или xhtml) DOM. Используйте те .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...