如何调整正则表达式以正确提取textarea中的key:value格式键值对
正则调整方案
你可以使用如下正则实现需求:
/[a-zA-Z!]+:\s*(?:"[^"]*"|[^"\s]+)/gi
原正则的问题
你之前的正则存在两个核心问题:
- 末尾的
[^ $]逻辑错误,会错误排除合法的结尾字符,也无法正确判断键值对的边界 - 没有区分带双引号和不带双引号的值的结束规则,带引号的值内部允许出现空格,应该匹配到闭合引号为止,不带引号的值则匹配到下一个空格为止
正则规则说明
各部分匹配逻辑如下:
[a-zA-Z!]+:匹配键名,支持大小写字母和!符号,符合你之前的规则要求:\s*:匹配冒号,以及冒号后可选的任意个空格(?:"[^"]*"|[^"\s]+):分支匹配两种值格式:"[^"]*":匹配被双引号包裹的内容,双引号内部允许任意字符(除了双引号本身)[^"\s]+:匹配不带双引号的值,直到遇到空格或字符串结尾停止
匹配效果验证
用你提供的测试字符串is:"browser" browser: "chrome 11.11 V" node: error type:"Error"测试,匹配结果完全符合预期:
is:"browser" browser: "chrome 11.11 V" node: error type:"Error"
内容的提问来源于stack exchange,提问作者Archin Modi
相关产品推荐
相关产品推荐

