JS正则实现变体字符串拆分为4个可选捕获分组 缺失返回null
JS多变体字符串正则捕获分组方案
问题背景
在JS中,有部分字符串需要拆分为捕获分组,难点在于这些字符串存在多种变体格式。
字符串变体示例:
group3::group4 group2:group3::group4 group1|group3::group4 group1|group2:group3::group4
最初编写的正则模式仅当所有分组都存在时可以正常捕获,当存在一个或多个分组缺失时,无法让每个分组被对应捕获组正确捕获。需求为:每次匹配时每个分组都需要被对应捕获组捕获,不存在的分组返回null。
原有问题正则:
\([^\r\n]+)?\|([^\r\n]+)?:([^\r\n]+)?::([^\r\n]+)?\g
预期每条字符串匹配结果格式如下:
array(01 => "group1", 02 => null, 03 => "group3", 04 => "group4")
实现代码
最终可用的实现示例如下:
// const text = 'group3::group4'; // const text = 'group2:group3::group4'; // const text = 'group1|group3::group4'; const text = 'group1|group2:group3::group4'; const regex = /(?:([^:|\s]*)\|)?(?:([^:|\s]*):)?([^:|\s]*)::([^:|\s]*)/; const match = text.match(regex); console.log( match );
内容的提问来源于stack exchange,提问作者stackminu
相关产品推荐
相关产品推荐

