JavaScript регулярное выражение для замены символа, игнорирующего теги HTML - PullRequest
1 голос
/ 30 июля 2010

Еще раз, мне нужна помощь, и я ценю вас всех за то, что вы здесь готовы помочь.
Я пытаюсь реализовать регулярное выражение для функции JavaScript, которая заменит строку текста, содержащуюся в теге HTML, но полностью игнорирует тег.
Например:
Строка, которую мне нужно найти и заменить - это знак доллара ($), и HTML-код, с которым я работаю, выглядит следующим образом:

<div class="myClass">
    <input type="radio" value="$233.93" name="myInput" id="myInputId">
    <label>
        $36.<sup>07</sup>
    </label>
</div>

Как видите, у меня есть сумма в долларах в атрибуте значения тега input и еще одна сумма в долларах внутри тега label.
Весь этот HTML-код содержится в td (ячейке таблицы), которая, в свою очередь, является частью таблицы, для которой я реализую сортировку по функциональности столбцов.
Моя проблема в том, что я не смог придумать регулярное выражение, которое полностью игнорировало бы теги HTML и соответствовало бы только строке внутри моего тега label ($36.<sup>07</sup>).
Я собрал это регулярное выражение: /[$](?=(\d{2,5}[.<]))/
Это регулярное выражение работает, но только на полпути, потому что оно соответствует первому знаку доллара в значении атрибута value, при условии, что регулярное выражение не установлено как глобальное, потому что оно заменит все знаки доллара, и я не хочу этого и я не могу изменить структуру HTML.

Любая помощь будет принята с благодарностью. Спасибо

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Вы можете легко решить эту проблему с помощью jQuery:

jQuery.trim( jQuery('label').text() )

, который уберет для вас теги и выдаст $36.07, который вы затем сможете протестировать с помощью гораздо более простого регулярного выражения.(Если вы в настоящее время не используете jQuery и не хотите его использовать, вы все равно можете взглянуть на его исходный код и посмотреть, как они реализовали функцию .text(), чтобы эмулировать ее.)

Хммм, перечитывая ваш вопрос, вы, возможно, спрашиваете что-то еще - получить все метки, содержащие $ (и игнорировать входные данные), которые вы можете сделать:

jQuery('label:contains($)')

или

jQuery('label').each( checkForDollars );

function checkForDollars()
{
    if ( jQuery(this).text().matches(/\$\d{2,5}/) } )
    {
        // do something
    }
)
0 голосов
/ 30 июля 2010

Это будет работать до тех пор, пока суммы всегда форматируются как $36.<sup>07</sup>.

function getAmount (s) { 
  var r = /\$([^<]+)<sup>(\d+)/.exec(s); 
  return r[1]+r[2]; 
}

getAmount("$36.<sup>07</sup>");
// returns "36.07"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...