Исключить конкретный шаблон из текста - PullRequest
1 голос
/ 22 октября 2019

У меня есть этот текст от API:

<p style="font-color:#000;font-weight:bold">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p>
<p style="font-color:#000;font-weight:500">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p>

Я пытаюсь исключить style="font-weight: bold ..etc" из текста, где бы он ни находился, затем разделить абзацы и поместить их в массив. Я использовал regexp и много пробовал, но ни одна из моих попыток, похоже, не решила проблему.

Язык javascript:

t1=text.replace(/^style*\"$/g, '')
t2=t1.split(/(<\/?p*>$)/gm)

Ответы [ 3 ]

1 голос
/ 22 октября 2019

Если это JavaScript на стороне браузера, то, как предполагает @JamesCoyle, было бы намного лучше использовать DOM для этого.

(вставьте легкомысленную погремушку о том, что вам не следует использовать регулярное выражение для разбора HTML здесь)

const html = '<p style="font-color:#000;font-weight:bold">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p>\n<p style="font-color:#000;font-weight:500">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p>'

extractParagraphTexts(html);

function extractParagraphTexts(html) {
   const tempDiv = document.createElement("div");
   tempDiv.innerHTML = html;

   const result = [];
   tempDiv.querySelectorAll("p").forEach(e => result.push(e.textContent));

   return result;
}
1 голос
/ 22 октября 2019

Вы можете попробовать это ....

const text = "<p style='font-color:#000;font-weight:bold'>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p><p style='font-color:#000;font-weight:500'>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p>";
str = text.replace(/style='[^']*'/g, '');

ИЛИ

str = text.replace(/style="[^"]*"/g, '');

теперь для тегов split p ...

str = str.substring(1, str.length-1);
let strArray = str.split(/></g);
for(var i = 0; i < strArray.length; i++){
    strArray[i] = '<' + strArray[i] + '>';
}
console.log(strArray);

Выход

[
"<p >Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p>",
"<p >Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p>"
]
0 голосов
/ 22 октября 2019

Вы слишком близки, чтобы ответить, просто улучшите regx:

var t1 = '<p style="font-color:#000;font-weight:bold">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p><p style="font-color:#000;font-weight:500">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore</p>';
   
    t1 = t1.replace(/style=\"[\S]+\"/gm, '');
    console.log(t1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...