JavaScript正则表达式替换忽略HTML标记的字符

时间:2010-07-30 16:12:05

标签: javascript jquery html regex

再次,我需要一些帮助,我感谢你们在这里愿意提供帮助 我正在尝试为JavaScript函数实现一个正则表达式,它将替换HTML标记中包含的一串文本,但完全忽略该标记。
例如:
我需要查找和替换的字符串是美元符号($), 我正在使用的HTML看起来像这样:

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

如您所见,我在输入标签的value属性中有一个美元金额,在label标签内有另一个金额。
所有这些HTML都包含在td(表格单元格)中,而td又是表格的一部分,我正在按照列功能实现排序。
我的问题是我无法提出一个完全忽略HTML标签的正则表达式,只匹配我的标签标签($36.<sup>07</sup>)中的字符串。
我把这个正则表达式放在一起:/[$](?=(\d{2,5}[.<]))/
这个正则表达式工作,但只有一半,因为它匹配值属性值的第一个美元符号,授予正则表达式它没有设置为全局,因为它将取代所有美元符号,我不想做那,我也无法改变HTML的结构。

非常感谢任何帮助。 感谢

2 个答案:

答案 0 :(得分:2)

您可以使用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
    }
)

答案 1 :(得分:0)

只要金额的格式始终为$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"