使用Sub-Match的JScript Regex XML属性?

时间:2015-03-04 22:37:33

标签: regex xml attributes jscript

我正在搜索以下文字:

<add key="Directory" value="" />

这是我的正则表达式:

add key=\x22Directory\x22 value=\x22([^\x22]*)\x22

我想要的输出是:

<add key="Directory" value="blue" />

但是,凭借我所拥有的,它似乎正在选择整个标签并产生:

<blue />

但是,根据regex101,它不应该。我做错了什么?

我也尝试过:

value=\x22([^\x22]*)\x22

但是,返回:

<add key="Directory" blue />

Regex101告诉我以下内容。它匹配并注意到第一个捕获组,但仍然替换整个值=“”

regex submatch

1 个答案:

答案 0 :(得分:1)

您想使用lookaround。所以这样的事情,你试图精确定位的地点在前瞻性文本之前和之后:

(?<=<add key="Directory" value=")[^"]*(?=" />)

根据自己的喜好调整,但这是基本想法。

编辑:

因为使用jscript,尝试这样的事情(调整替换):

var re = /add key=\x22Directory\x22 value=\x22([^\x22]*)\x22/; 
var str = '<add key="Directory" value="" />'; //<- sample input. it could be your whole XML doc.
var subst = 'add key="Directory" value="Blue"'; 

var result = str.replace(re, subst);

...或

var re = /(add key=\x22Directory\x22 value=\x22)[^\x22]*(\x22)/; 
var str = '<root>\n    <someOtherElement/>\n    <add key="Directory" value="" />\n</root>';
var subst = '$1Blue$2'; 

var result = str.replace(re, subst);