我也需要通过两种方式在 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)
我也需要通过两种方式在 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)
你可以这样做 :
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)"
它可以做得更短,但会失去可读性。
我不会写一个代码。但是这个想法会给你一点php知识的解决方案。
替换 allAND和ORwith<space>AND<space>并<space>OR<space>仔细查看第二个版本周围有空格。
用单个空格替换所有双空格。循环遍历此规则,直到没有双空格。
替换(<space>为(和。<space>)_ )再仔细看
<space>在这里表示空白。
.replace(/\s*([()])\s*/g, "$1")
.replace(/AND|OR/g, " $& ")
.replace(/\s+/g, ' ');
这在您的最后一个测试字符串上正常工作。它应该占一个以上的空格分隔括号,甚至修剪额外的空间。
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;
}