正则表达式替换撇号之间的所有引号

时间:2011-03-21 23:57:32

标签: javascript regex

我正在使用javascript和经典的asp,我希望有人可以帮助我使用这个正则表达式。

我需要替换

  

“(引用)

撇号与正则表达式之间的

我在考虑这个问题,但这会用引号替换整个字符串吗?

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

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

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

我的身体可以帮助

由于

3 个答案:

答案 0 :(得分:1)

首先,您需要将.*?转换为捕获组,方法是将()置于其周围。然后在替换方法中,您可以使用$1来表示第一个捕获组,$2来表示第二个捕获组,等等。换句话说,您可以这样做:

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

我认为你想要用“& quot;而不是字符& quot;”来代替,但你可以在必要时轻松替换它。

Here's a working example →

答案 1 :(得分:0)

仅供参考,你不能用一个正则表达式做到这一点并让它变得万无一失。原因是正则表达式无法跟踪状态,因此如果您的完整字符串类似于

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

正则表达式无法知道第二个引用的test不应该被替换。

要执行此操作,您需要先匹配/'([^\']+)'/,然后对每个匹配中的所有引号进行替换.replace/(\"/g, '"')

答案 2 :(得分:0)

是的,你需要不止一个正则表达式。假设您不想处理转义引号,则此测试函数适用于您的测试数据:

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;
}

如果您确实需要处理具有转义引号的字符串,则可以轻松修改正则表达式。