Regexp для сопоставления чисел и единиц в фрагменте HTML? - PullRequest
0 голосов
/ 21 марта 2009

Я пытаюсь сделать регулярное выражение, которое будет соответствовать числам, исключая числа, которые являются частью других слов или чисел внутри определенных тегов 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 ]

1 голос
/ 21 марта 2009
<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 браузера. Используйте это.

0 голосов
/ 21 марта 2009

Я пытаюсь создать регулярное выражение, которое будет соответствовать числам, исключая числа, являющиеся частью других слов или чисел внутри определенных тегов HTML.

Regex не может анализировать HTML. Не используйте регулярные выражения для анализа HTML. Не пропустите Go. Не собирайте £ 200.

Чтобы «соответствовать только чему-то, не принадлежащему чему-либо еще», вам понадобится отрицательное утверждение с обратным взглядом («(? <!»), Но JavaScript-выражения не поддерживают lookbehind, а большинство других реализаций регулярного выражения не поддерживают сложную переменную Если у вас действительно был внешний вид переменной длины, это все равно не позволило бы надежно проанализировать HTML, потому что, как упоминалось ранее, много раз каждый день, регулярное выражение не могу разобрать HTML. </p>

Используйте анализатор HTML. HTML-анализатор браузера сможет переваривать даже частичные вводы без жалоб.

0 голосов
/ 21 марта 2009

Модификатор регулярного выражения [^] работает только с отдельными символами, а не с составными выражениями, такими как (script | style | head). Что вы хотите? :

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

(?! ... ) означает «не сопровождается ...», но [^ ... ] означает «один символ не в ...».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...