2011-03-21 108 views
0

我正在使用JavaScript和经典的ASP,我希望有人可以帮助我这个正则表达式。正则表达式替换撇号之间的所有qoutes

我需要更换

“(引号)

撇号与正则表达式之间。

我在这行所想,但是这将取代整个字符串与报价?

textarea = textarea.replace(/\'.*?\'/ig, '&quote;'); 

而不是'this is the text "click here"'我需要它是

'this is the text "&quote;click here&quote;' 

我任何机构可以帮助

感谢

回答

1

首先,你需要通过把()围绕它把你变成.*?捕获组。然后在替换方法,你可以使用$1代表第一个捕获组,$2代表第二个,等等。所以,换句话说,你会怎么做:

textarea.innerHTML = textarea.innerHTML 
          .replace(/'(.*?)"(.*?)"(.*?)'/g, 
             "'$1&quote;$2&quote;$3'"); 

我假设你想更换“字&报价,而不是字符& QUOT;但是你可以很容易地更换,如果有必要

Here's a working example →

+0

不错的例子 - 我喜欢这个工具... – 2011-03-22 00:27:40

+0

按照你的例子这是什么结果应该是 2011-03-22 00:30:34

+0

示例和代码更新并更正。 – mVChr 2011-03-22 00:34:54

0

仅供参考,你不能用一个单一的正则表达式做到这一点,并把它做到万无一失。其原因是,正则表达式无法跟踪状态,所以如果你满弦是一样的东西

'"test"' "test" '"test"' 

有没有办法为正则表达式知道引述test第二不应该被更换。

要做到这一点,你需要的第一场比赛/'([^\']+)'/,然后执行更换所有报价每场比赛里面.replace/(\"/g, '"')

+0

我100%确定所有的引号介于'这是文本'点击这里''撇号的 – 2011-03-22 00:18:33

+0

其实,我不认为它完全正确。当你使用正则表达式来匹配单引号中的字符串时,它会检查第一个和第三个 - 因为第二个的开始是第一个的一部分,所以它不会匹配(man,这是一个复杂的解释!)。 – Czechnology 2011-03-22 00:20:46

+0

我正在写一个mysql插入statemet有引号outsite字符串,我不想取代...我只想取代之间的''(两个apostophe的)外面我不想取代... – 2011-03-22 00:23:55

0

是的,你需要一个以上的正则表达式假设你不想。处理逃脱的报价,这个测试f在您的测试数据结作品:

function process_data(text) 
{ // Convert double quotes to HTML entity inside single quoted strings. 
    var re_dsq = /("[^"]*")|('[^']*')/g; // $1 = "string" or $2 = 'string' 
    var re_dq = /"/g;      // A single " 
    text = text.replace(re_dsq, function(m0, m1, m2) { 
       if (m1) return m1; 
       return m2.replace(re_dq, '"'); 
      }); 
    return text; 
} 

如果你需要处理有逃脱引号中的字符串,正则表达式可以很容易地修改。