0

我也需要通过两种方式在 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

4 回答 4

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)"

它可以做得更短,但会失去可读性。

于 2013-04-10T06:08:59.250 回答
2

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

  • 替换 allANDORwith<space>AND<space><space>OR<space>仔细查看第二个版本周围有空格。

  • 用单个空格替换所有双空格。循环遍历此规则,直到没有双空格。

  • 替换(<space>(和。<space>)_ )再仔细看

<space>在这里表示空白。

于 2013-04-10T06:21:27.733 回答
1
.replace(/\s*([()])\s*/g, "$1")
.replace(/AND|OR/g, " $& ")
.replace(/\s+/g, ' ');

这在您的最后一个测试字符串上正常工作。它应该占一个以上的空格分隔括号,甚至修剪额外的空间。

于 2013-04-10T06:15:17.217 回答
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;
}
于 2013-04-10T06:43:33.460 回答