2012-11-14 13 views
0

我有以下代碼:JavaScript的正則表達式來檢查搜索字符串由要麼沒​​有之前或空格

var requestData = {}; 

var byPattern = /by=(\w+)/; 
var value = byPattern.exec(stringToSearch); 
if (value && value.length === 2) 
    requestData.by = value[1]; 

與此正則表達式的第一個問題,就是如果stringToSearch是例如「待機= FOO 「,它匹配並返回」foo「。我希望它在那裏失敗。我希望正則表達式匹配只有在沒有之前「by」或空格

所以我換成/^\s*by=(\w+)/

這是好,但我想匹配正則表達式,如果stringToSearch是例如「城市= =由巴黎FOO」。它應該匹配並返回「foo」。不是這裏的情況:/

有人可以幫我修復正則表達式嗎?非常感謝!

回答

2

如果你想空間或捕獲組之前沒有,這將是(+|^)

/(|^)by=(\w+)/ 

從技術上講,我匹配空間或沒有,但效果是一樣的。

+0

此解決方案也適用。我應該接受哪一個? – Blackbird

+0

@黑鳥你使用的那個。如果你想拒絕'stand-by = 3',選擇我的;-) –

+1

如果你想匹配一般的空白空間(不只是空格鍵,而是tab,newline,&c。),使用'/(\ S | ^)由=(\ W +)/' – Malvolio

5

魔語是\b

var byPattern = /\bby=(\w+)/; 
console.log(byPattern.exec("by=3")); 
console.log(byPattern.exec(" by=3")); 
console.log(byPattern.exec("standby=3")); 

只有前兩個是匹配的,這是(我認爲)你想要什麼。

+2

'\ bby'也可以匹配'備用= 3'中的'by' –

+0

看起來不錯。我不知道正則表達式中的退格。這個魔法是如何工作的?它也適用於'city = paris by = 3' – Blackbird

+1

@Blackbird'\ b'是單詞邊界,而不是退格。 –

相關問題