如何使用正则表达式从指定格式字符串中提取两个目标匹配值
正则写法解决方案
原有正则问题说明
你之前使用的\[(.*?)\]仅会匹配整个方括号内的完整内容,得到的是Entity:Equipment、Property:Space两个结果,没有进一步提取冒号后的目标字段。
正确正则写法
场景1:确定字符串固定为[x:y]@[x:z]格式
直接使用如下正则即可一次性捕获两个目标值:
\[.*?:(.*?)\]@\[.*?:(.*?)\]
捕获组1对应Equipment,捕获组2对应Space。
以JavaScript为例的使用示例:
const targetStr = '[Entity:Equipment]@[Property:Space]' const matchRes = targetStr.match(/\[.*?:(.*?)\]@\[.*?:(.*?)\]/) // matchRes[1] 输出 Equipment // matchRes[2] 输出 Space
场景2:需要全局匹配所有方括号内冒号后的值(不受中间分隔符限制)
使用带全局标识的正则,遍历提取每个匹配项的捕获组即可:
\[.*?:(.*?)\]
以JavaScript为例的使用示例:
const targetStr = '[Entity:Equipment]@[Property:Space]' const reg = /\[.*?:(.*?)\]/g const result = [] let matchItem while ((matchItem = reg.exec(targetStr)) !== null) { result.push(matchItem[1]) } // result 输出 ['Equipment', 'Space']
内容的提问来源于stack exchange,提问作者Stijn
相关产品推荐
相关产品推荐

