2011-08-13 37 views
0

我在JavaScript中有以下字符串的Javascript正則表達式的幫助

var mystring = " abcdef(p,q); check(x,y); cef(m,n);" 

我希望做一個字符串替換,使得我最後的字符串是:

mystring = " abcdef(p,q); someothercheck\(x,y\); cef(m,n);" 

x和y應保持後相同代換。並且反斜槓是必要的,因爲我需要將它們傳遞給其他命令。

在字符串中也可以有其他的Parantheses。

+3

爲什麼一個正則表達式只是字符串替換 「檢查」用「someothercheck」和「(」用「\\(」和「)」用「\\」)。 –

+1

like mystring.replace('check','somothercheck')。replace('(','\\\ (').replace(')','\\\')'); http://jsfiddle.net/ytnRx/ – stecb

+0

3個正則表達式優於1個 –

回答

4

如果您沒有其他括號,應該很容易。

mystring = mystring.replace("check(", "someothercheck\\("); 
mystring = mystring.replace(")", "\\)"); 

編輯這工作也多括號的情況下(這不會影響空的)。 var str =「abcdef; check(x,y); cef();」 PATT = /((\ W)/克;?

// transform (x in \(x 
str = str.replace(patt, '\\($1'); 

patt = /(\w)\)/g 

// transform y) in y\); 
str = str.replace(patt, '$1\\)'); 

// transform check in someothercheck 
str = str.replace('check', 'someothercheck'); 

編輯現在只能轉換檢查字符串

function convertCheck(str, check, someOtherCheck) { 
    // console.log(str + " contains " + check + "? "); 
    // console.log(str.indexOf(check)); 

    if (str.indexOf(check) === -1) return str; 
    var patt1 = /\((\w)/g, 
    patt2 = /(\w)\)/g; 

    str = str.replace(patt1, '\\($1'); 
    str = str.replace(patt2, '$1\\)'); 
    str = str.replace(check, someOtherCheck); 

    return str; 
} 

var str = "abcdef(); check(x,y); cef();", 
    tokens = str.split(';'); 
for (var i = 0; i < tokens.length; i++) { 
    tokens[i] = convertCheck(tokens[i], "check", "someothercheck"); 
} 
str = tokens.join(";"); 

alert(str); // "abcdef(); someothercheck/(x,y/); cef();" 
+0

不要從字面上理解他。考慮'someothercheck'作爲例子 –

+0

我編輯了這個問題。字符串中還有其他的parantheses。 – rightskewed

+0

@Pablo,請不要直接帶他(@ user278064)。作爲例子考慮答案。 – aalku

2
var myString = "abcdef; check(x,y); cef;"; 

myString.replace(/(\w+)\(/, 'someother$1(') 
     .replace(/\(/g, '\\(') 
     .replace(/\)/g, '\\)') 
+0

我編輯了這個問題。我們需要考慮到字符串中還有其他的禁忌。 – rightskewed