2012-02-06 65 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 :)