我正在尝试创建一个匹配数字的正则表达式,不包括某些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 + '[^>]*?<');
答案 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解析器将能够在不抱怨的情况下消化部分输入。