var ans = '#1>2,2,2,0,#2>3,2,1'
我希望在#1>之后立即删除所有2个但不是#2>。我的预期结果是:
ans = '#1>0,#2>3,2,1'
我怎么能用jquery做到这一点?
答案 0 :(得分:1)
试试这个
var ans = '#1>2,2,2,0,#2>3,2,1'
ans.replace(/#1>(2,{0,})+/g,function() {
return "#1>"
})
输出:
#1>0,#2>3,2,1
答案 1 :(得分:0)
以下是正则表达式替换与递归的混合:
/**
* @param a - original string
* @param s - string to search for
* @param r - string to replace with
*/
function fun(a, s, r) {
var re = new RegExp(s + ',?');
// replace #1>2 with #1> and also the comma , if it is present
a = a.replace(re, r);
// if there are more such instances of #1>2 then call the function recursively
if (a.indexOf(s) > -1) {
a = fun(a, s, r);
}
return a;
}
我测试了以下值:
fun('#1>2,2,2,0,#2>3,2,1', '#1>2', '#1>') // '#1>0,#2>3,2,1'
fun('#1>2,0,#2>3,2,1', '#1>2', '#1>') // '#1>0,#2>3,2,1'
fun('#1>2,0,#2>3,2,1,#1>2', '#1>2', '#1>') // '#1>0,#2>3,2,1,#1>'
您也可以将'#2>3'
替换为'#2>'
fun('#1>2,0,#2>3,2,1,#1>2', '#2>3', '#2>') // "#1>2,0,#2>2,1,#1>2"
或者,使用单个正则表达式(这还不支持变量):
function fun(a) {
return a.replace(/#1>(?:2,*)+/g, '#1>');
}
fun('#1>2,2,2,0,#2>3,2,1') // '#1>0,#2>3,2,1'
fun('#1>2,0,#2>3,2,1') // '#1>0,#2>3,2,1'
fun('#1>2,0,#2>3,2,1,#1>2') // '#1>0,#2>3,2,1,#1>'
答案 2 :(得分:-2)
当然,正则表达式是一个有效的解决方案。但对于喜欢迭代解决方案的人来说,这是其中一种方法。
function blah(ans) {
var newAns = '';
for (var i = 0; i < ans.length; i++) {
var triplet = ans.substr(i, 3);
if (triplet == '#1>') {
newAns = newAns.concat(triplet);
i += 3;
while (ans.substr(i, 2) == '2,') {
i += 2;
}
}
newAns = newAns.concat(ans[i]);
}
return newAns;
}
var ans = blah('#1>2,2,2,0,#2>3,2,1');