如果一个组不匹配,则.match()返回null

时间:2015-09-17 07:54:09

标签: javascript regex match

我要检查几个包含字母数字子字符串的字符串,并且可能在括号中包含一个列表,其中条目由"分隔:"

示例:

"this(is:an:example)"
"thisAsWell"

首先,我搜索alphasubstring和列表,然后我将列表分成一个数组。

.match(/([a-z]*)\((.*)\)/)
 .spit(":")

适用于包含字母数字和列表的字符串,但如果缺少字符串则不行。

示例:

// .match(...)
"abc"  
  -> [ "abc" , null , null ]
"abc(1,2,3)"
  -> [ "abc(1,2,3)" , "abc" , "1:2:3" ]
"(1:2:3)"
  -> [ "(1:2:3)" , null , null ] 

如何处理它最好,检查两个子串可选? 我想到了可能的回报:

"abc"  
  -> [ "abc" , "abc" , null ]
"abc(1,2,3)"
  -> [ "abc(1,2,3)" , "abc" , "1:2:3" ]
"(1:2:3)"
  -> [ "(1:2:3)" , null , "1:2:3" ] 

如果可能的话,每个正则表达式都会分开列表。

1 个答案:

答案 0 :(得分:1)

您可以选择使用这两个部分:

var re = /(?=.)([a-z]*)(?:\(([^)]*)\))?/

(?=.)可以确保我们不匹配空输入。

<强>测试

abc".match(re)
["abc", "abc", undefined]

"abc(1,2,3)".match(re)
["abc(1,2,3)", "abc", "1,2,3"]

"(1,2,3)".match(re)
["(1,2,3)", "", "1,2,3"]

"".match(re)
null