2011-08-13 34 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