RegEx How to get value between tags excluding a word

<td align="right">1&nbsp;883,5</td>
<td align="right"><font color="red">-0,56%</font></td>
<td align="right">1&nbsp;890,4</td>
<td align="right">1&nbsp;876,6</td>
<td align="right">99&nbsp;993</td>
<td align="right">26&nbsp;983</td>
<td align="right">161&nbsp;944</td>

Мне нужно получить из этих строк:

1883,5

1890,4

1876,6

99993

26983

161994

Пожалуйста помогите мне. Мне нужно получить все числа в тегах, но не получать проценты


Ответы (1 шт):

Автор решения: vsemozhebuty

Поскольку деталей у вас маловато, вот приблизитльный вариант: получаем список ячеек, превращаем его в массив строк внутри ячеек, отфильтровываем строки с процентами и удаляем из оставшихся строк всё, кроме чисел и заятых.

const numbers = Array.from(
    document.querySelectorAll('td'),
    td => td.innerText,
  )
  .filter(string => !string.includes('%'))
  .map(string => string.replace(/[^\d,]/g, ''));
  
console.log(numbers);
<table>
 <td align="right">1&nbsp;883,5</td>
 <td align="right"><font color="red">-0,56%</font></td>
 <td align="right">1&nbsp;890,4</td>
 <td align="right">1&nbsp;876,6</td>
 <td align="right">99&nbsp;993</td>
 <td align="right">26&nbsp;983</td>
 <td align="right">161&nbsp;944</td>
</table>

Вариант с извлечением чисел из одной строки:

const data = document.querySelector('table').innerText;
const numbers = data.match(/[\d,\u00a0]+(?![%\d,])/g)
  .map(string => string.replace(/\u00a0/g, ''));

console.log(numbers);
    <table>
     <td align="right">1&nbsp;883,5</td>
     <td align="right"><font color="red">-0,56%</font></td>
     <td align="right">1&nbsp;890,4</td>
     <td align="right">1&nbsp;876,6</td>
     <td align="right">99&nbsp;993</td>
     <td align="right">26&nbsp;983</td>
     <td align="right">161&nbsp;944</td>
    </table>

Вариант с поиском в исходном коде:

const html = `
  <td align="right">1&nbsp;883,5</td>
  <td align="right"><font color="red">-0,56%</font></td>
  <td align="right">1&nbsp;890,4</td>
  <td align="right">1&nbsp;876,6</td>
  <td align="right">99&nbsp;993</td>
  <td align="right">26&nbsp;983</td>
  <td align="right">161&nbsp;944</td>`;

const numbers = html.match(/(?<=>)([\d,]|&nbsp;)+(?=<)/g)
  .map(string => string.replace(/&nbsp;/g, ''));

console.log(numbers);

→ Ссылка