假设我得到如下的动态字符串。
#04215: ["#02080=#04217+#04217_DUP5554","#01066=(#01047+#01111+#01048+#01118+#01049+#01050+#01121+#01128+#01131+#01141+#01138+#01148+#01053+#01062+#01054+#02080+#02048+#01064+#01063+#01065+#01051+#01052+#02062+#02069+#02072+#02079)","#02002=#01066","#02007=(#02002+#02003+#02004+#02005+#02006)","#02010=(#02007+#02008+#02009)","#04216+#04216_DUP5554=#04217+#04217_DUP5554","#04215+#04215_DUP5554=#04216+#04216_DUP5554"]
我必须将“#04215 +#04215_DUP5554 =#04216 +#04216_DUP5554”部分作为"#04215_DUP9262=#04216+#04216_DUP9262"
。我制作了一个匹配'#04215+#04215_DUP9262=' as '([#][0]["+pgNo+"][0-9]{3}[+][#][0]["+pgNo+"][0-9]{3}[_][D][U][P][0-9]{4}[=])'
的正则表达式。我尝试了下面的内容。
考虑我在变量a中得到动态字符串;
var regex2=new RegExp("([#][0]["+pgNo+"][0-9]{3}[+][#][0]["+pgNo+"][0-9]{3}[_][D][U][P][0-9]{4}[=]) ([#][0]["+pgNo+"][0-9]{3}[_][D][U][P][0-9]{4})" ,"g");
a=a.replace(regex2,'$1,$2');
它不是替换字符串。请帮助。
regex2中的 pgNo 是动态的。在目前的情况下,它的价值是'4'。子串是不可能的,因为'='符号太多了。基本上,我必须将“#04215 +#04215_DUP9262 =”之类的事件更改为“#04215_DUP9262 =”
答案 0 :(得分:0)
您可以执行以下操作:/#([0-9]{5})\+#\1/g
=> $1
。
在代码示例中,这将是:
let regex = new RegExp('(#' + pgNo + ')\\+\\1', 'g');
let myString = "#04215+#04215_DUP9262=#04216+#04216_DUP9262";
myString = myString.replace(regex, '$1');
在此(#[0-9]{5})
将匹配散列后的任意5个字符数,\+
与数字之间的“+”匹配,(必须将其转义,否则将其解释为“一个或多个”)前面的标记),\1
是对第一个匹配的反向引用。