j如何从给定字符串的一部分替换字符串?

时间:2016-04-19 07:35:49

标签: javascript jquery regex

var ans = '#1>2,2,2,0,#2>3,2,1'

我希望在#1>之后立即删除所有2个但不是#2>。我的预期结果是:

ans = '#1>0,#2>3,2,1'

我怎么能用jquery做到这一点?

3 个答案:

答案 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

Test here

答案 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');