【问题标题】:.match() returns null if one group doesn't match.match() 如果一组不匹配则返回 null
【发布时间】:2015-09-17 07:54:09
【问题描述】:

我必须检查几个包含字母数字子字符串的字符串,并且可能包含括号中的列表,其中条目由“:”分隔

例子:

"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" ] 

如果可能的话,超棒的答案会根据正则表达式拆分列表。

【问题讨论】:

  • 使用?:“匹配前面的字符0或1次。”

标签: javascript regex match


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多