2012-05-24 48 views
2

我有以下代碼。鑑於變量u1可以是下列任何一項:我在這裏正確使用模式匹配嗎?

NBSLoan|Accept|PPI+No|60Months
NBSLoan|Refer|PPI+No|60Months
DeBSLoan|Accept|PPI+No|60Months

此外,60Months永遠是不同的,我能模式匹配使用下面的JavaScript的最後一部分?我是否需要爲管道|符號添加特殊字符?或者,這是不行的,因爲我只想匹配更長的字符串的第一部分?

<script type="text/javascript"> 
var u1 = 'NBSLoan|Accept|PPI+No|60Months'; 

var n_accept = /^NBSLoan|Accept$/; 
var n_refer = /^NBSLoan|Refer$/; 
var d_accept = /^DeBSLoan|Accept$/; 

if (u1.match(n_accept)) {  
var pvnPixel = '<img src="https://url1.com"/>'; 
document.write(pvnPixel); 
} 
else if (u1.match(n_refer)) {  
var pvnPixel2 = '<img src="url2.com"/>'; 
document.write(pvnPixel2); 
} 
else if (u1.match(d_accept)) { 
var pvnPixel3 = '<img src="url3.com"/>'; 
document.write(pvnPixel3); 
} 
</script> 

回答

5

我需要放在一個特殊字符爲管道|符號?或者,這是不行的,因爲我只想匹配更長的字符串的第一部分?

兩者。

  • 您需要使用反斜槓轉義管道符號以匹配文字管道字符。沒有反斜槓意味着alternation
  • 您還需要刪除行結束符。

試試這個正則表達式:

/^NBSLoan\|Accept/ 
+0

感謝,要給這是一個嘗試 - 語法看起來像它的工作。 – zik

+0

我剛剛匹配使用'match(/^NBSLoan \ | Accept /)'而不是使用變量的字符串。但是這很有幫助。謝謝! – zik

0

你爲什麼不跟split('|')第一分字段:

function dispatch(u) { 
    var parts = u.split('|'), 
     key = parts[0] + "_" + parts[1]; 
     disp_table = { 
     'NBSLoan_Accept':'url1.com', 
     'NBSLoan_Refer':'url2.com', 
     'DeBSLoan_Accept':'url3.com' 
     }, 
     url = disp_table[key]; 


    url && document.write("<img src=\""+url+"\"/>"); 
} 
0

您也想刪除$(這意味着字符串的結尾)或添加一個*來捕獲所有其他字符:

輸掉結尾:

/^NBSLoan\|Accept/ 

匹配和捕捉其他字符:

/^NBSLoan\|Accept.*$/ 
相關問題