【问题标题】:Javascript regex helpJavascript 正则表达式帮助
【发布时间】:2011-08-13 14:54:50
【问题描述】:

我在 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。

【问题讨论】:

  • 为什么是正则表达式?只需将“check”替换为“someothercheck”,将“(”替换为“\(”,将“)”替换为“\)”。
  • like mystring.replace('check','somothercheck').replace('(','\\(').replace(')','\\)'); jsfiddle.net/ytnRx
  • 3 个正则表达式优于一个
  • 我已经编辑了这个问题。请注意其他地方是否存在括号,@stebs 方法将不起作用。

标签: javascript regex string escaping


【解决方案1】:

如果没有其他括号,应该很容易。

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

EDIT 这也适用于多括号的情况(它不影响空括号)。 var str="abcdef;检查(x,y);cef();" 帕特 = /((\w)/g;

// 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');

EDIT 现在它只转换检查字符串。

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();"

【讨论】:

  • 不要从字面上理解他。以someothercheck 为例
  • 我已经编辑了这个问题。字符串中还有其他括号。
  • @Pablo,不要从字面上理解他 (@user278064)。以答案为例。
  • @user270349 很抱歉我的问题不清楚!我需要用字符串检查它:“func1(a,b,c); func2(a,v,b); check (x,y); cef(c,d)"
  • 不是我,是@user278064
【解决方案2】:
var myString = "abcdef; check(x,y); cef;";

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

【讨论】:

  • 我已经编辑了这个问题。我们需要考虑到字符串中还有其他括号。
猜你喜欢
  • 1970-01-01
  • 2010-09-30
  • 2014-03-24
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
相关资源
最近更新 更多