2013-04-10 35 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; 
}