2013-09-29 94 views
3

我正在嘗試編寫一個函數,該函數可以構建一個正則表達式,該正則表達式可以測試字符串是否以字符串開頭幷包含另一個字符串。正則表達式的字符串以X開頭並且包含Y

function buildRegExp(startsWith,contains){ 
    return new RegExp(?????) 
} 

例如:

buildRegExp('abc','fg').test('abcdefg') 

以上表達式應評估爲真,因爲字符串 'ABCDEFG' 開始與 'ABC' 和包含 'FG'。

的「startsWith」和「包含」字符串可能重疊海誓山盟,因此正則表達式不能簡單地搜索「startsWith」的字符串,然後搜索「包含」字符串

下面還應該求true:

buildRegExp('abc','bcd').test('abcdefg') 

我不能使用簡單的字符串函數。它需要是一個正則表達式,因爲我正在將此正則表達式傳遞給MongoDB查詢。

+1

等待 - 我不明白第二部分。 「bce」不在字符串中。 –

+1

我懷疑第二個例子應該是'buildRegExp('abc','bcd')。test('abcdefg')' – Barmar

回答

7

像這樣的圖案將處理其中startsWith/contains子匹配的字符串在重疊的情況下:

/(?=.*bcd)^abc/ 

return new RegExp("(?=.*" + contains + ")^" + startsWith); 
+1

即將提交更新到我的答案,但你首先得到它。榮譽。 –

+0

有興趣看到這個和傳統'返回s.startsWith(startsWith)&& s.contains(包含)之間的一些基準;' – azz

+0

+1爲緊湊和高效。通過你的正則表達式的答案享受巡航,好工作。 :) – zx81

-1

嘗試此正則表達式

(^X).*Y 

例如在javascript

/(^ab).*bc/.test('abc ')=>假

/(^ab).*bc/.test('abcbc')=>真

+1

這不適用於重疊的情況。你的第一個例子應該返回'true'。 – Barmar

相關問題