2012-10-15 68 views
2

假設我需要在javascript中使用字符串匹配以獲得與LIKE運算符等效的結果。在javascript中爲正則表達式在字符串匹配中傳遞變量

WHERE "str1" LIKE '%str2%'; 

下面的匹配表達式起作用。

var str1="abcd/pqrst"; 
var str2 = "pqr"; 

if(str1.match(/^.*pqr.*/)){ //do something}; 

但我需要傳遞一個變量而不是pqr,就像下面的語句。請幫助。

//Wrong 
var re = new RegExp("/^.*"+ str2 + ".*/"); 
if(str1.match(re){ //do something} 
+1

那麼,它是否存在K + – elclanrs

+0

@elclanrs:這不起作用:var re = new RegExp(「/^.*"+ str2 +」。* /「); if(str1.match(re){// do something} – user930514

回答

2

如果你需要做的是確定一個字符串在不同的字符串中間時,使用str1.indexOf(str2) >= 0。在其他語言中,這將相當於str1.contains(str2),儘管Javascript字符串缺少包含方法。

如果你確實想把str2放在正則表達式的中間,一定要escape it

+0

非常感謝!我只是簡單地將事情搞糟! – user930514

+0

技術上講,對於給定的sql查詢應該是'str.indexOf(str2)> - 1',或者'〜str.indexOf(str2)'。如果'%'之間的項位於字符串值的開始/結尾,那麼Afaik'LIKE'也會返回一些內容。 – KooiInc

+0

@Jeff:if(str1.contains(str2)was所有我需要的。謝謝傑夫。已刪除,所以我無法將其標記爲答案 – user930514

4

首先,可能適合使用RegExp.test。其次,創建RegExp對象時,不應使用RegExp文字字符('/')。

所以,你的代碼就變成了:

var str1 = 'abcd/pqrst' 
    ,str2 = 'pqr' 
    ,re = RegExp('^'+str2+'.*'); 

if (re.test(str1)) { /* do things */} 

三,RegExp/^pqr.*/)將測試falsestr1WHERE "str1" LIKE '%str2%';的等效條件與RegExp(str2,'i').test(str1)(注意i修飾符(不區分大小寫))或甚至只是~str.indexOf(str2)(請參閱@Jeff Bowmans答案)一樣簡單。