-1

背景情報: CSS セレクターを使用してドキュメントの DOM ツリーを分析できるプログラムを作成しています。古いブラウザーをサポートする必要があるため、querySelectorAll を使用できません。最新のブラウザーでもバグが発生する傾向があり、十分に強力ではありません。つまり、独自の CSS セレクター エンジン/パーサーを作成する必要があります。

次の正規表現があります。

var expression = /([^(>\+~)\\\(\)|^(>\+~)\\\[\]]+|\([^\)]+\)|\[[^\]]+\]|\\\.)+/g;

以前は、セレクターを [祖先、コンビネーター、子孫] の形式でセクションに分割していました。使用例:

var selector = 'div[class]>a~p';
var parts = selector.match(expression);

残念ながら、私が得る出力は次のとおりです。

// parts: ['div[class]', 'a', 'p'];

出力を次のようにしたいと思います。

// parts: ['div[class]', '>', 'a', '~', 'p'];

問題は、式がコンビネータを食べるのを防ぐ方法がわからないことです。何かアドバイス?前もって感謝します。

4

1 に答える 1

0

CSS を正規表現で解析しようとしないでください。これは正規言語ではありません。これにはツールがあり、正規表現は 1 つではありません。さくっと検索して見つけたのがこちら

于 2012-09-16T15:12:19.893 に答える