2012-02-06 82 views
2

为了澄清,我对正则表达式绝对是可怕的。我已经在这里找到了一些这方面的例子,但我根本不知道如何实现它,以供我使用。JavaScript正则表达式,找到所有文本除了引用

我在JavaScript中为客户做了(而不是很好)的英文翻译,但是我遇到了翻译变量名和选择选项值的问题,这显然会中断搜索功能和输入功能。

我的现有代码:

var englishStrings = new Array(); 
englishStrings[0] = /List Members/g; 

var frenchStrings = new Array(); 
frenchStrings[0] = "Listes des membres"; 

$(document).ready(function() { 
    //alert(language); 
    if (language == "English" || language == null) 
    { 
     $("#language_link").text("Voir en français"); 
     var strNewString = $('body').html(); 
     strNewString = strNewString.replace(/Nccp/g, 'NCCP'); 
     strNewString = strNewString.replace(/Actions/g, 'Menu'); 
     strNewString = strNewString.replace(/Id/g, 'ID'); 
    } 
    else 
    { 
     $("#language_link").text("View in English"); 
     var strNewString = $('body').html(); 
     strNewString = strNewString.replace(/Nccp/g, 'NCCP'); 
     strNewString = strNewString.replace(/Actions/g, 'Menu'); 
     strNewString = strNewString.replace(/Id/g, 'ID'); 
     $.each(englishStrings, function(index, value) { 
      strNewString = strNewString.replace(value, frenchStrings[index]); 
     }); 
     strNewString = strNewString.replace('Voir', 'View'); 
    } 
    $('body').html(strNewString); 
}); 

我想改变正则表达式查找字符串(/列出成员/ G)到搜索本身不包括引号,而不是事后的想法,因为我见过的例子。
例如:

<option value="List Members">List Members</option> 

成为当前

<option value="Listes des membres">Listes des membres</option> 

我希望它成为

<option value="List Members">Listes des membres</option> 

撇除引号的字符串。

再次,我知道正则表达式是操作HTML的一个糟糕的选择,我很遗憾这样做,但我们已经投入了相当多的时间这样做。

+0

我为我的好奇心对不起一个糟糕的选择,不过我刚才回答你的问题? – Alexis 2012-02-08 16:33:10

回答

1

如果我理解正确的话,你可以尝试使用这样的:

replace(/([^"'])List Members([^"'])/g, '$1Listes des membres$2') 

(或者,有些更精确的变种:replace(/([^"'])List Members\1/g, '$1Listes des membres$1') - 将仅排除字符串相匹配的一对引号)

在许多方言有可能做到不增加反向引用到代线,像这样:

replace(/(?<!'|")List Members(?!'|")/, 'Listes des membres') # won't work in JS! 

在这里,我们在开始时负面看后面检查,最后看到负向前瞻。不幸的是,JavaScript的正则表达式引擎不支持回顾后的语法,所以才可能实现表达的先行部分:

replace(/List Members(?!'|")/, 'Listes des membres')` 

这人会排除所有字符串用撇号或引号结束(它不会检查开头报价)。

是的,正则表达式确实是操纵HTML :)