用于匹配HTML片段中的数字和单位的正则表达式?

时间:2009-03-21 04:38:34

标签: javascript html regex parsing

我正在尝试创建一个匹配数字的正则表达式,不包括某些html标记内的其他单词或数字的数字。匹配数字的部分效果很好,但我无法弄清楚如何在html中找到数字。

当前代码:

//number regexp part
var prefix = '\\b()';//for future use
var baseNumber = '((\\+|-)?([\\d,]+)(?:(\\.)(\\d+))?)';
var SIBaseUnit = 'm|kg|s|A|K|mol|cd';
var SIPrefix = 'Y|Z|E|P|T|G|M|k|h|ia|d|c|m|µ|n|p|f|a|z|y';
var SIUnit = '(?:('+SIPrefix+')?('+SIBaseUnit+'))';
var generalSuffix = '(PM|AM|pm|am|in|ft)';
var suffix = '('+SIUnit+'|'+generalSuffix+')?\\b';
var number = '(' + prefix + baseNumber + suffix + ')';

//trying to make it match only when not within tags or inside excluded tags
var htmlBlackList = 'script|style|head'
var htmlStartTag = '<[^(' + htmlBlackList + ')]\\b[^>]*?>';
var reDecimal = new RegExp(htmlStartTag + '[^<]*?' + number + '[^>]*?<');

3 个答案:

答案 0 :(得分:1)

<script>
   var htmlFragment = "<script>alert('hi')</script>";
   var style = "<style>.foo { font-size: 14pt }</style>";
   // ...
</script>
<!-- turn off this style for now
  <style> ... </style>
 -->

祝你好运获得正则表达式来解决这个问题。

你正在使用JavaScript,所以我猜你可能在浏览器中运行。这意味着您可以访问DOM,从而可以访问浏览器非常强大的HTML解析器。 使用它。

答案 1 :(得分:0)

[^]正则表达式修饰符仅适用于单个字符,而不适用于(script | style | head)等复合表达式。你想要的是什么? :

var htmlStartTag = '<(?!(' + htmlBlackList + ')\\b)[^>]*?>';

(?! ... )表示“未跟随...”,但[^ ... ]表示“不在......中的单个字符”。

答案 2 :(得分:0)

  

我正在尝试创建一个匹配数字的正则表达式,不包括某些html标记内其他单词或数字的数字。

正则表达式无法解析HTML。不要使用正则表达式来解析HTML。不要过去Go。不要收200英镑。

要“只匹配其他东西” - 你需要一个负面的后观断言(“(?&lt;!”),但JavaScript Regexps不支持lookbehind,大多数其他正则表达式实现不支持复杂可变长度的lookbehind你需要有一个匹配上下文的希望,比如在一个标签里面。即使你确实有可变长度的lookbehind,那仍然无法可靠地解析HTML,因为如前所述,每天都有很多次,正则表达式无法解析HTML。

使用HTML解析器。浏览器HTML解析器将能够在不抱怨的情况下消化部分输入。