2

私はそのようなものを持っています:

[@parameter='value']

[@parameter]

そして、両方のケースを解析するために正規表現が必要です。最初に、2番目の唯一のパラメーターでパラメーターと値を返します。

今、私はそのようなものを持っています

"[@short-name='shorty']".match(/\[\@(.*)\=\'(.*)\'\]/)

これは

["[@short-name='shorty']", "short-name", "shorty"]

その素晴らしいですが、最初の場合にのみ、助けてください

編集:

おそらく2つの一致を1つに置き換えることができると思ったので、可能であれば、現在のソリューションを少し拡張することをお勧めします。

次のようなものに一致します:

PARENT//CHILD[@parameter='value']

また

PARENT//CHILD[@parameter]

また

PARENT//CHILD

戻る必要があります

[ parent, child, parameter, value ]

[ parent, child, parameter ]

[ parent, child ]

どうもありがとう!

編集2:

わかりました、それは簡単です

/([A-Z]+)\/\/([A-Z]+)(\[@([^=\]]*)(?:='(.*)'])?)?/

もっと簡単にできるなら、方法を教えてください

4

2 に答える 2

1

これは一般的なケースで機能します:

/\[@([^=\]]*)(?:='(.*)'])?/

あなたが行っていた多くの不必要なエスケープを削除しました。は括弧で囲まれ ( のためキャプチャされません) ?:、オプションになります。\[@.*を に変更し\[@[^=\]]て、等号または右中括弧 (どちらかが存在する可能性があります) までのみキャプチャしようとするようにする必要があります。

これを更新して引用符を正しく一致させたり、引用符を省略したりすることもできます

/\[@([^=\]]*)(?:=(['"]?)(.*)\2])?/

編集: 同様の式を使用して、1 行に複数の値を一致させることもできます。.*?値を取得するために追加するだけです。

"[@short-name='shorty'] [@long-name=\"longy\"] [@longest]".replace(
    /\[@([^=\]]*)(?:=(['"]?)(.*?)\2])?/g,
function () { console.log(arguments[1], arguments[3]); })

これにより、"short-name, shorty", "long-name longy", "longest undefined"

于 2013-02-22T17:31:40.660 に答える
0

2 番目の部分はオプションにします。いくつかのスペースを最適なビューに配置します。

"[@short-name]".match(/\[\@(.*)   (\=\'(.*)\')?    \]/)

コードを括弧で囲み、a を追加する?とうまくいきます。 http://metahtml.sourceforge.net/documentation/regex/regex_3.mhtml#SEC14

于 2013-02-22T17:27:44.220 に答える