我需要在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)
答案 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知识的解决方案。
将所有AND
和OR
替换为<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;
}