2016-02-22 33 views
0

我正在開發Firefox的上下文菜單加載項。我想獲取selectedText並驗證它是否是一個數字。如果它是一個數字,我正在使用該數字值進一步處理。Firefox上下文菜單中的Regex映射contentScript

但是,我被卡在一個點,我試圖用regex in javascript replace method替換[(,)]

以下是其中未映射任何數目開始/與()結束的代碼:

var menuItemLRG = contextMenu.Item({ 
    label: "LRG", 
    data: "http://myurl/&val=:", 
    contentScript: 'self.on("click", function (node, data) {' + 
        ' var selectedText = window.getSelection().toString();' + 
        ' var formattedText1 = selectedText.trim();' + 
        ' var formattedText2 = formattedText1.replace(/^[,\[\]()]*/g,"");' + 
        ' var formattedText3 = formattedText2.replace(/[,\[\]()]*$/g,"");' + 
        ' console.log(formattedText3); '+ 
        ' var regExp = new RegExp(/^[0-9]+$/);' + 
        ' if (regExp.test(formattedText3) == true) {' + 
        '  console.log("URL to follow :"+data+formattedText3);' + 
        '  window.open(data+formattedText3);' + 
        ' } '+ 
       '});' 
}); 

以上代碼未能更換()在採樣輸入:(5663812, 11620033)

但是,香草測試像下面這樣成功:

<script> 
var str = "(2342423,])"; 
var tmpVal1 = str.replace(/^[,\[\]()]*/g,""); 
var tmpVal2 = tmpVal1.replace(/[,\[\]()]*$/g,""); 
var regExp = new RegExp(/^[0-9]+$/); 
if (regExp.test(tmpVal2) == true) { 
    alert(tmpVal2); 
} 
</script> 

回答

1

經過多次反覆試驗才發現這個問題。當我們試圖在單引號內跳過一個字符時,我們需要爲轉義字符添加一個轉義字符以獲得識別,否則單個轉義碼\]將被視爲],這會導致正則表達式模式的突然結束。

在這種情況下:

' var formattedText2 = formattedText1.replace(/^[,\[\]()]*/g,"");' 

解碼爲:

var formattedText2 = formattedText1.replace(/^[,[]()]*/g,""); 

,而不是爲:

var formattedText2 = formattedText1.replace(/^[,\[\]()]*/g,""); 

因此,通過增加一個轉義字符用於解決轉義字符模式正確:

' var formattedText2 = formattedText1.replace(/^[,\\[\\]()]*/g,"");' 

對不起,浪費你的時間來分析原因,如果有的話。