2017-05-10 40 views
-1

我想獲得正則表達式的工作,但事實並非如此。它一定是一件小事,但我可以使用一些幫助。我試圖在https://regex101.com/上使用正則表達式測試程序,它說我沒有做正確的,但它不在我的代碼中工作。試圖得到一個JavaScript的正則表達式匹配與某些字母后跟任何數字

我想看看一個字符串,看看是否有一個匹配:

空間字母v或V 0和9的空間字母T或T 0和9的空間之間沒有空格數

之間沒有空格數

例: 「V5 T2」 或 「V5 T2」

這裏的JavaScript/jQuery的:

if (mystring.indexOf(/v[0-9] t[0-9]/i) > -1) { 
    console.log("found!"); 
} else { 
    console.log("not found!"); 
} 

誰能告訴我,我做錯了什麼嗎?我是新來的正則表達式。

+0

'indexOf'不適用於正則表達式。使用'match'或'exec'或'test' – anubhava

回答

3

indexOf不接受正則表達式,它接受一個字符串。所以你的正則表達式轉換爲字符串,然後不匹配。

如果你想檢查匹配,使用RegExp#test

if (/v[0-9] t[0-9]/i.test(mystring)) { 
    // Yes 
} else { 
    // No 
} 

注意,看起來字符串中的任何地方。

另外請注意,[0-9]\d,所以正則表達式可能是/v\d t\d/i

var mystring = "foo V5 T7 bar"; 
 
if (/v\d t\d/i.test(mystring)) { 
 
    console.log("found!"); 
 
} else { 
 
    console.log("not found!"); 
 
}

如果你需要知道哪裏比賽發生了,你會使用String#matchRegExp#exec代替,並查看結果的index屬性:

var mystring = "foo V5 T7 bar"; 
 
var match = /v\d t\d/i.exec(mystring); 
 
if (match) { 
 
    console.log("Found at " + match.index); 
 
} else { 
 
    console.log("Not found"); 
 
}

+0

謝謝!這是正確的答案。 – LauraNMS

+1

在這種情況下,你需要'match'而不是test(它只對匹配/不匹配返回true/false):''foo V5 T7 bar'.match(/ v \ dt \ d/i) [「V5 T7」,索引:4,輸入:「foo V5 T7 bar」](索引0是字符串的匹配部分)。 – SVSchmidt

+0

@SVSchmidt:不,你不需要'match'來檢查**是否有匹配。這正是「測試」的目的。 –

相關問題