Javascript jQuery正则表达式匹配帮助(可选条件)
我有这样的想法:Javascript jQuery正则表达式匹配帮助(可选条件),javascript,regex,Javascript,Regex,我有这样的想法: [@parameter='value'] 及 我需要regexp来解析这两种情况, 在第一个参数中,返回第二个唯一参数中的参数和值 现在,我得到了类似的东西 "[@short-name='shorty']".match(/\[\@(.*)\=\'(.*)\'\]/) 返回 ["[@short-name='shorty']", "short-name", "shorty"] 这很好,但只有在第一种情况下,请帮助 编辑: 我只是想,可能两个匹配可以被一个替换,所以如果可能的话
[@parameter='value']
及
我需要regexp来解析这两种情况,
在第一个参数中,返回第二个唯一参数中的参数和值
现在,我得到了类似的东西
"[@short-name='shorty']".match(/\[\@(.*)\=\'(.*)\'\]/)
返回
["[@short-name='shorty']", "short-name", "shorty"]
这很好,但只有在第一种情况下,请帮助
编辑:
我只是想,可能两个匹配可以被一个替换,所以如果可能的话,对当前解决方案进行一点扩展将是非常好的
匹配如下内容:
PARENT//CHILD[@parameter='value']
或
或
应该返回
[ parent, child, parameter, value ]
[ parent, child, parameter ]
[ parent, child ]
非常感谢
编辑2:
好吧,很简单
/([A-Z]+)\/\/([A-Z]+)(\[@([^=\]]*)(?:='(.*)'])?)?/
如果可以简化,请告诉我如何让第二部分成为可选部分。 把一些空间放在最佳视野
"[@short-name]".match(/\[\@(.*) (\=\'(.*)\')? \]/)
用括号括起代码并添加一个?
就可以了。
这将适用于您的一般情况:
/\[@([^=\]]*)(?:='(.*)'])?/
我消除了很多你正在做的不必要的逃避。该值位于括号中(由于?:
,因此未捕获),然后成为可选值。必须将\[@.*
更改为\[@[^=\]]
,这样它将仅尝试捕捉相等或右大括号(其中任何一个都可能存在)
您还可以更新它以正确匹配引号,甚至可以忽略引号
/\[@([^=\]]*)(?:=(['"]?)(.*)\2])?/
编辑:您还可以使用类似的表达式匹配每行的多个值;只需添加*?
即可捕获值
"[@short-name='shorty'] [@long-name=\"longy\"] [@longest]".replace(
/\[@([^=\]]*)(?:=(['"]?)(.*?)\2])?/g,
function () { console.log(arguments[1], arguments[3]); })
这将产生“短名,短名”,“长名长名”,“最长未定义”
请在回答之前进行测试…在第一种情况下,它不起作用
/\[@([^=\]]*)(?:='(.*)'])?/
/\[@([^=\]]*)(?:=(['"]?)(.*)\2])?/
"[@short-name='shorty'] [@long-name=\"longy\"] [@longest]".replace(
/\[@([^=\]]*)(?:=(['"]?)(.*?)\2])?/g,
function () { console.log(arguments[1], arguments[3]); })