对键值对的棘手正则表达式解析
Tricky regex parse on key value pairs
我花了一个多小时来弄乱正则表达式模式,以便对一个复杂的字符串进行正确的find-and-replace
。
我需要像这样转换一个字符串:
foo a='b' c="d and e" wombat=true a fizz='buzz' "hello='goodbye'"
并将其规范化为:
foo "a='b'" "c='d and e'" "wombat='true'" a "fizz='buzz'" "hello='goodbye'"
基本上:
每个
key/value
对都应该用双引号括起来,值用单引号括起来,无论它们以前是如何包装的。多空格值必须在前面用单引号或双引号括起来,才能作为值"包含"。
到目前为止,我正在按以下顺序使用正则表达式:
str = str.replace(/([a-zA-Z0-9]*)=("(.*?)"|'(.*?)')/g, '"$1=''$2''');
但是,这有很多问题。
是否有任何单一更换解决方案?
替换
/(['"]?)('w+)=(?:(['"])((?:(?!'3).)*)'3|('S+))'1/g
跟
"$2='$4$5'"
给通缉犯
foo "a='b'" "c='d and e'" "wombat='true'" a "fizz='buzz'" "hello='goodbye'"
表达式细分如下:
(['"]?) # group 1: either single or double quote, optional
('w+) # group 2: word characters (i.e. the "key")
= # a literal "="
(?: # non-capturing group
(['"]) # group 3: either single or double quote
( # group 4 (quoted value):
(?:(?!'3).)* # any character that's not the same as group 3
) # end group 4
'3 # the quote from group 3
| # or...
('S+) # group 5 (non-quoted value, no spaces)
) # end non-capturing group
'1 # whatever group 1 had, for good measure
下面的正则表达式将满足您的要求:
"?('w+)='?(['w]+)'?"?|"?('w+)="(['w's]+)""?
替换为:
"$1$3='$2$4'"
演示
相关文章:
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 键按正则表达式以查找具有负值的小数
- 键按下上的正则表达式 仅限制数字
- 尝试使用Javascript正则表达式来获取“&"分隔文本,无论它是否's是最后一个值
- 如何匹配多个值使用正则表达式返回单个值
- AND 和 OR 运算符、正则表达式和值长度
- 使用正则表达式缩短值
- 对键值对的棘手正则表达式解析
- 正则表达式替换键,括号中的值
- 使用正则表达式键匹配 Javascript 循环遍历对象获取值
- 正则表达式:无值匹配
- 正则表达式返回值,即使它不匹配
- 如何将正则表达式求值为不同的值
- javascript通过使用正则表达式匹配键从JSON对象检索值
- 用一个正则表达式提取值
- 使用正则表达式从javascript函数返回语句中查找键/值
- 如何在jquery中添加一个方法来匹配正则表达式的值
- 使用java脚本或正则表达式从值中分割数字和字符串
- 使用正则表达式提取值
- 正则表达式从短代码标记解析键值对