0

次の YACC 式に一致する正規表現を作成しようとしています: [left | right] || [top | bottom]:

一致する必要があります: (左または右) AND OR (上または下)。または ' |' は簡単に実行できますが、' ||' わかりません。この式は、W3C によって定義された CSS グラデーション文法の一部です。

<linear-gradient> = linear-gradient(
    [ [ <angle> | to <side-or-corner> ] ,]? 
    <color-stop>[, <color-stop>]+
)

<side-or-corner> = [left | right] || [top | bottom]

編集: ギビング: 左上 一致: 左上

ギビング: 左 マッチング: 左

与える:右下 一致:右下

与える: 右 20px 一致: 右

これがそれをよりよく説明することを願っています。ありがとうございました

4

2 に答える 2

0

私が正しく理解していれば、側面(左/右/上/下)またはコーナー(左上、右下...)のいずれかが必要です。
これは次のように解決できます:

/^((left|right|top|bottom)|((top|bottom)delimiter(left|right)))$/

もちろん、コーナー表記の側面の順序を逆にすることもできます(コーナーを左上ではなく左上として出力するため):

/^((left|right|top|bottom)|((left|right)delimiter(top|bottom)))$/

区切り文字は目的の区切り文字であることに注意してください(空のスペースまたはマイナス記号にすることができます)。
お役に立てれば!

PS:ツイッターで助けを求めるあなたの呼びかけを聞いた:P。

あなたの編集に基づいて更新
します、私は今あなたが必要なものを理解していると思います:

/^((left|right|top|bottom)|((left|right|(-?\d*(\.\d+)?(px|em|\%)))\s+(top|bottom|(-?\d*(\.\d+)?(px|em|\%)))))$/   

この正規表現は、方向キーワード(左/上/右/下)または実際の値(またはなど)のいずれかである、左と上の値で定義された側面(左/上/右/下)または2つの側面に一致するようになりました。 。 値の正規表現()は、任意の浮動小数点数(最初のゼロがなくても:の代わりに)とそれに続く測定単位(ここでは、単位の完全なリストを指定できます )と一致します。100px1.4em
-?\d*(\.\d+)?(px|em|\%).1230.123

合格した私の(javascript)テストの一部を次に示します。

var pattern = /^((left|right|top|bottom)|((left|right|(-?\d*(\.\d+)?(px|em|\%)))\s+(top|bottom|(-?\d*(\.\d+)?(px|em|\%)))))$/;
pattern.test('left bottom');   // true
pattern.test('-10px top');     // true
pattern.test('-.23em 140%');   // true

最終更新

  • 開始文字と終了文字を削除しました
  • サイドパターンとコーナーパターンの順序を入れ替え、コーナーパターンを優先して最初に一致させる

/(((left|right|(-?\d*(\.\d+)?(px|em|\%)))\s+(top|bottom|(-?\d*(\.\d+)?(px|em|\%))))|(left|right|top|bottom))/

于 2012-07-04T10:49:47.110 に答える
0
/(left|right)|(top|bottom)|(left|right)\s(top|bottom)/

タスクを実行する必要があります。あなたはそれを短くするかもしれません

/(left|right|top|bottom)|(left|right)\s(top|bottom)/

また

/(left|right)|((left|right)\s)?(top|bottom)/
于 2012-07-04T10:46:40.970 に答える