2009-03-21 3 views
0

数字と一致する正規表現を作成しようとしていますが、特定のhtmlタグ内の他の単語や数字の一部である数字は除きます。番号を一致させるための部分はうまくいきますが、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

[^]正規表現修飾子は単一の文字ではなく、類似化合物の表現上で動作します(スクリプト|スタイル|頭)。あなたが欲しいのは? :

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

(?! ...)は '...続かない' という意味が、[^ ... ]は 'ないで...単一の文字' を意味します。

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パーサーにアクセスできます。 それを使用してください。

+0

私は目の前にそれを行う上で計画していましたe htmlはFirefoxのプラグインの中でレンダリングされていました。それで、なぜ完全なhtmlファイルにアクセスできなかったのですか?たぶん私はそれが思っているほど難しいと思えば、私は事を再考すべきでしょう。 – Annan

+0

私はhtmlからdomノードを作成し、数字を見つけてそれらを処理し、domをhtmlに戻してから戻すことができます。私はレンダリングされていない場合、どのように多くの文字列をdomとbackコストに変換するのだろうか。たとえ私が正規表現を使うことができたとしても、おそらく効率的ではないでしょう。 – Annan

+0

どれくらいの時間がかかるか分かりません。ベンチマークすることをお勧めします。 – derobert

0

私は、特定のHTMLタグ内の他の単語や数字の一部である数字を除く数字と一致します正規表現を作成しようとしています。

正規表現はHTMLを解析できません。正規表現を使ってHTMLを解析しないでください。行かないでください。 £200を徴収しないでください。

「他のもの以外のものにのみ一致する」場合は、負のlookbehindアサーション( "(?<!))が必要ですが、JavaScript Regexpsはlookbehindをサポートしていません。あなたが可変長のlookbehindを持っていても、それはまだ信頼性の高いHTMLを解析していないでしょう。なぜなら、これまでに何度も言及したように、正規表現は、HTMLを解析することはできません。

は、HTMLパーサを使用してください。ブラウザのHTMLパーサが文句なくても部分入力を消化することができるようになります。

関連する問題