2013-04-10 53 views
0

我需要使用正则表达式在JS太有两种方式基于正则表达式的字符串修改

1)运营商(并修改字符串| 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)

+0

运营商仅| OR ..第二闲来无事还括号也都是只有()..没有方括号或其他干啥,将在那里字符串 – Garry 2013-04-10 06:03:24

+2

什么是您所遇到的问题?你有尝试过什么吗? – 2013-04-10 06:06:07

+0

如果AND/OR被两个空格而不是一个空格分隔,会出现问题吗? – 2013-04-10 06:09:03

回答

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
.replace(/\s*([()])\s*/g, "$1") 
.replace(/AND|OR/g, " $& ") 
.replace(/\s+/g, ' '); 

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

2

我不会写一个单一的代码。但这个想法会给你带来一点PHP知识的解决方案。

  • 全部更换ANDOR精心<space>AND<space><space>OR<space>看第二个版本有他们周围的空格。

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

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

<space>这里的意思是空白处。使用

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; 
}