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]); })