CSSのように、#, ., [], or {}
文字を使用して分割したい文字列があります。希望する機能がある:
- 入力: "div#foo[bar='value'].baz{text}"
- 出力: ["div", "#foo", "[bar='value'", ".baz", "{text"]
JavaScript正規表現は引用符で囲まれ、文字セットには含まれません
これは、この正規表現で、十分に簡単です: input.match(/([#.\[{]|^.*?)[^#.\[{\]}]*/g)
しかし、これは引用符内の構文の文字を無視していません、私もそれが好きです。
(e.x. "div[bar='value.baz']"
が.
を無視すべきである)どのように私は私の正規表現の第二部([^#.\[{\]}]*
部分)は否定文字セットが、また、引用符内の任意の文字だけでなく取り込むことができます。言い換えれば、どのようにRegEx、私の現在のものに(\"|').+?\1
を実装することができます。
編集: 私はまともな作品正規表現を考え出しましたが、(例:"stuff here \\" quote "
)引用符の内側にエスケープ引用符を処理することはできません。まず
str.match(/([#.\[{]|^.*?)((['"]).*?\3|[^.#\[\]{\}])*/g);
これはまさに私が探していたものでした。ありがとうございました。 – Azmisov
私は '{}'と '[] 'の中の複数の' bar = value'の中で引用符を扱うように少し修正しました:str.match(/(^ | [\。#[\] {}]) ?( '[^'] * '))+/g) '(^' \ *) – Azmisov