RegEx для удаления пробелов в строке - PullRequest
1 голос
/ 29 мая 2019

Пытаетесь создать очень простой HTML-минификатор, который удаляет только пробелы между тегами?

Я думаю, что лучший способ - использовать регулярные выражения JavaScript?но никогда не могу понять, как их правильно делать.

<p>leave white spaces</p> <p>leave white spaces</p>

После минимизации:

 <p>leave white space</p><p>leave white space</p>

пытается нацелиться на пространство между > здесь <

Ответы [ 2 ]

5 голосов
/ 29 мая 2019

Вместо этого вы можете использовать DOMParser, а затем remove - все текстовые узлы, которые после обрезки пусты:

const input = `<p>leave white spaces</p> <p>leave white spaces</p>`;
const doc = new DOMParser().parseFromString(input, 'text/html');
[...doc.body.childNodes].forEach((node) => {
  if (node.nodeType === 3 && node.textContent.trim() === '') {
    node.remove();
  }
});
console.log(doc.body.innerHTML);
0 голосов
/ 29 мая 2019

Если здесь мы хотим или должны использовать регулярные выражения, мы можем добавить не захватывающую группу (?:\s+) между тегами open и close и заменить ее пустой строкой, используя выражение, такое как:

<\/[a-z]+>(?:\s+)<[a-z]+>

Мы можем добавить дополнительные границы к этому выражению, однако, если наши входные данные будут точно такими же, как в примере, приведенном в вопросе, этого будет достаточно.

Например, для тегов h1 мы бы расширили наш список символов:

<\/[a-z0-9]+>(?:\s+)<[a-z0-9]+>

Для экземпляров в верхнем регистре, если они есть, мы добавили бы флаг i.

ТЕСТ

const regex = /<\/[a-z]+>(?:\s+)<[a-z]+>/gm;
const str = `<p>leave white spaces</p>   <p>leave white spaces</p>    <p>leave white spaces</p>   <p>leave white spaces</p><p>leave white spaces</p>   <p>leave white spaces</p>    <p>leave white spaces</p>   <p>leave white spaces</p>
<p>leave white spaces</p>   <p>leave white spaces</p>    <p>leave white spaces</p>   <p>leave white spaces</p><p>leave white spaces</p>   <p>leave white spaces</p>    <p>leave white spaces</p>   <p>leave white spaces</p>
<p>leave white spaces</p>   <p>leave white spaces</p>    <p>leave white spaces</p>   <p>leave white spaces</p><p>leave white spaces</p>   <p>leave white spaces</p>    <p>leave white spaces</p>   <p>leave white spaces</p>

`;
const subst = ``;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log(result);

RegEx

Если это выражение нежелательно, его можно изменить / изменить в regex101.com .

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

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