我想做的是str.replace(pattern, callback)
,
不仅仅是str.replace(pattern, replace_pattern)
,
可以在javascript中完成吗?
答案 0 :(得分:15)
为什么,是的,你可以做到这一点:str.replace(pattern, function () { ... })
。
以下是一些文档:https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace
答案 1 :(得分:5)
是
var s2 = s1.replace(/regex/, function(whole, part1, part2, ...) { ... })
该函数作为第一个参数传递整个匹配的字符串。如果有任何捕获组,则将它们作为后续参数传递。
答案 2 :(得分:0)
一般情况下,s1.replace(/regex/, function(whole, part1, part2, ...partN) { ... })
没有解决方案,您需要了解所有部分,并且它不是有效的g
选项;
RegExp('\{([^\}]*)\}', 'g')
的示例可以通过循环解决...假设URI模板问题,用全局getData
字典替换每个占位符。
const tpl = 'myEtc/{aa}/etc1/{bb}/etc2'
const getData = {"aa":"expandAA","bb":"expandBB"}
function expandTpl(getData,s0){ // s0 is the link_template_input
const r = RegExp('\{([^\}]*)\}', 'g');
let s = '';
let idx=0
for (let a; (a=r.exec(s0)) !== null;) {
s += ( s0.substring(idx, r.lastIndex-a[0].length) + getData[a[1]] )
idx = r.lastIndex
}
if ( idx<s0.length ) s += s0.substring(idx,s0.length)
return s
}
console.log( tpl )
console.log( expandTpl(getData,tpl) )