基于正则表达式的字符串修改

时间:2013-04-10 06:01:02

标签: javascript regex string

我需要在js中使用REGEX修改字符串,这也是两种方式

1)字符串中的运算符(AND | OR)必须具有前导和尾随空格,即如果字符串是

(C1 AND C2 ORC3) AND (C4OR C5)然后必须修改为(C1 AND C2 OR C3) AND (C4 OR C5)

2)括号之间不能有空格,也不能有条件(Cn),即

( ( C1 AND C2 OR C3) ) AND ( C4 OR C5)然后必须将其修改为((C1 AND C2 OR C3)) AND (C4 OR C5)

4 个答案:

答案 0 :(得分:3)

你可以这样做:

var str = .replace(/(AND|OR)(\w)/g, "$1 $2")
          .replace(/(\w)(AND|OR)/g, "$1 $2")
          .replace(/\(\s/g, "(")
          .replace(/\s\)/g, ")");

改变

"( ( C1 AND C2 ORC3 ) ) AND ( C4 ORC5)"

"((C1 AND C2 OR C3)) AND (C4 OR C5)"

它可以缩短,但会失去可读性。

答案 1 :(得分:2)

我不会写一个代码。但是这个想法会给你一些PHP知识的解决方案。

  • 将所有ANDOR替换为<space>AND<space><space>OR<space>仔细查看第二个版本周围是否有空格。

  • 用单个空格替换所有双白空格。循环通过此规则,直到没有双重空格。

  • (<space>替换为(,将<space>)替换为)。再仔细看

<space>在这里意味着空白。

答案 2 :(得分:1)

.replace(/\s*([()])\s*/g, "$1")
.replace(/AND|OR/g, " $& ")
.replace(/\s+/g, ' ');

这适用于您上一个测试字符串。它应该考虑多个空格分隔括号,甚至修剪额外的空间。

答案 3 :(得分:0)

function attempt(str){
   return str.replace(/\s/g,"").replace(/(AND|OR)/g," $1 ");
}
function test(){
    var str = '( ( C1ANDC2 OR C3)          ) AND     ( C4  ORC5)',
        expected = '((C1 AND C2 OR C3)) AND (C4 OR C5)';
    return attempt(str) ===  expected;
}