一致させたいこれらのカップル行があり、現在、複数の正規表現を使用してすべてを一致させていますが、1つの正規表現で両方を一致させることが可能かどうか疑問に思っています。
@@Author:logan
//and these, three variations
@@tags:markdown,github,repetitivetag, tagwithsubtags:subtag, another:subtag:subtag2:repeating:this:repeating,repetitivetag,repetitivetag:withsubby,repetitivetag:withsubtag
@@tags:markdown;github;repetitivetag;tagwithsubtags:subtag,another:subtag:subtag2:repeating:this:repeating;repetitivetag;repetitivetag:withsubby;repetitivetag:withsubtag
@@tags:markdown;git-hub;repetitive-tag;tag_with_sub-tags:sub_tag,another:sub_tag:sub-tag2:repeating:this:repeat-_-_-ing;repetitive-tag;repetitive_tag:with_subby;repetitive_tag:with_subtag
私が最初に行うことは、@@NAME:VALUE
パーツを一致させることです。
/^(?:@@)(\w+):(.*.)(?:\n+|$)/gm
NAME
最初のグループがで、2番目のグループがであるとしましょうVALUE
。
もしそうなら、私NAME
はtags
次の正規表現に一致しますVALUE
:
/(\w+)((?=,|;)|(:\w[\w|\-]+\w){0,}|)/g
これは、以前に一致した、TAG;TAG;TAG ...
またはそのTAG,TAG,TAG ...
中で一致するいくつかのグループに一致しますVALUE
TAG
次に、それぞれをこれと一致させて、SUBTAG
/(:)(\w[\w|\-]+\w)(?=:|)/g
これで、上記で一致したグループ:SUBTAG:SUBTAG:SUBTAG ...
内のようなグループと一致しますTAG
要約すれば
合わせたい
(@@)(NAME)(:)(VALUE)
(TAG)(;)(TAG)(;)(TAG) ...
VALUEで(:)(SUBTAG)(:)(SUBTAG))(;)
タグで
例
@@Author:logan
取得できるはずですName = Author
、Value = logan
値が複数の場合(コンマまたはセミコロンで区切られている場合など)、次のようなものに一致すると、次のよう
@@tags:tag1;tag2
になります。Name = Tags
、`値=['tag1'、'tag2']値に次のようなサブ値がある場合
@@Author:logan:lastname
またはその意図された目的としてこれ
@@Tags:tag1:subtag;tag2:subtag1:subtag2
取得できるはずです:Name = Author
、Value = [{logan : [lastname]}]
およびName = Tags
、Value = [{tag1 : [subtag]}, {tag2 : [subtag1, subtag2]}]
グループ内のグループを、存在する場合にのみ一致させるにはどうすればよいですか?