我有这几行我想匹配,现在我使用多个正则表达式来匹配它们,但是我想知道是否可以在一个正则表达式中匹配两者:
@@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
,第二组是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) ...
价值(:)(SUBTAG)(:)(SUBTAG))(;)
在标签中
例子
@@Author:logan
应该可以得到Name = Author
,Value = logan
如果值是多个,比如如果它用逗号或分号分隔,那么匹配类似的东西
@@tags:tag1;tag2
应该能够得到Name = Tags
, `值 = ['tag1','tag2']如果 value 有一个子值,例如
@@Author:logan:lastname
或以此为预期目的
@@Tags:tag1:subtag;tag2:subtag1:subtag2
应该能够得到:Name = Author
,Value = [{logan : [lastname]}]
和Name = Tags
,Value = [{tag1 : [subtag]}, {tag2 : [subtag1, subtag2]}]
我如何匹配组内的组,并且只有当它们存在时?