【问题标题】:String manipulate using regex使用正则表达式操作字符串
【发布时间】:2013-04-01 02:25:26
【问题描述】:

我有一个字符串可以说C1 AND C2 OR C3 (~!@#$%) AND C4 OR C5 并说我的输入是C3 然后我想使用正则表达式删除C3 和下一个运算符AND|OR 之间的垃圾/数据。

所以对于上面的字符串,我想输出为C1 AND C2 OR C3 AND C4 OR C5

【问题讨论】:

  • 垃圾数据总是用括号括起来吗?另外,到目前为止,您尝试了什么?
  • No .. 它可以是任何前任 C1 AND C2 OR C3 ~!@#$% ()()()() ### AND C4 OR C5
  • 还需要提供输入(C1/C2/C3....),因为输入可以是 C2 .. 没有任何垃圾.. 那么我不应该在之后删除垃圾C3
  • 您的变量是否始终采用Cn 的形式(其中n 是一个数字)?向我们提供有关您的数据的详细信息,以便我们不必做出假设。下面的C1 AND C2 OR C2 ANDC1ANDC2$$#@@ORC3 AND C4 呢?这会发生吗?中心的垃圾该不该清除?
  • 是的 .. 总是Cn 的形式,运算符也总是只有AND|OR .. 字符串中不能有多个 C2 或 C1 .. 或任何 Cn

标签: javascript regex string


【解决方案1】:

试试这个:

var str = 'C1 AND C2 OR C3 (~!@#$%) AND C4 OR C5'
var input = 'C3'
console.log(str.replace(new RegExp("(" + input + " ).*?(AND|OR)"), "$1$2"))

【讨论】:

  • 这对输入字符串极为特殊,并非在所有情况下都有效。
  • 您必须将 C3 替换为您输入的任何内容。
【解决方案2】:
function purgeJunk(variable, expression) {
    return expression.replace(purgeJunk.regexp, function(match, digits, operator) {
        if (digits != variable) return match;
        return "C" + digits + " " + operator;
    });
};

function purgeAllJunk(expression) {
    return expression.replace(purgeJunk.regexp, function(match, digits, operator) {
        return "C" + digits + " " + operator;
    });
};

purgeJunk.regexp = /C(\d+) .*?(AND|OR)/g;

// delete junk after C2
purgeJunk(2, "C1 AND C2 OR C3 (~!@#$%) AND C4 OR C5") 
    == "C1 AND C2 OR C3 (~!@#$%) AND C4 OR C5"

// delete junk after C3
purgeJunk(3, "C1 AND C2 OR C3 (~!@#$%) AND C4 OR C5") 
    == "C1 AND C2 OR C3 AND C4 OR C5"

// delete all junk
purgeAllJunk("C1 # AND C2 OR C3 ~!@#$% ()()()() ### AND C4 more garbage OR C5")
    == "C1 AND C2 OR C3 AND C4 OR C5"

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-20
    相关资源
    最近更新 更多