2017-05-10 18 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'来检查**是否有匹配。这正是“测试”的目的。 –

相关问题