我正在尝试检查字符串是否包含E
或F
等特定字母,并使用以下代码
/^(F?)/.test('E22')
问题是它返回true
时应返回false
。令我最困扰的是,在regexpal.com上测试正则表达式是完美的,但是当应用时......错了。
知道出了什么问题吗?
http://jsfiddle.net/alleks/CykQv/
我已经解释了自己的错误。在不同的情况下,我会进行个别检查。因此,在特定情况下,我需要查看字符串是否包含E
,而在其他情况下,如果包含F
//Case1
if (/^(F?)/.test(stringContainsE)) ....
//Case2
if (/^(F?)/.test(stringContainsF)) ....
两种情况都不应该返回TRUE:http://jsfiddle.net/alleks/CykQv/2/
答案 0 :(得分:9)
The question mark makes the F optional。对于每个字符串,该正则表达式都将返回true。
/[EF]/
将匹配包含字母E和/或字母F的字符串。
编辑:正如Paul在评论中提到的那样,^字符匹配字符串的开头。如果字符必须出现在字符串的开头,那么:
/^E/
将在字符串的开头测试一个E.如果您希望在任何地方,请忽略^
。但是,在这种情况下的Javascript中,您应该只使用:
myString.charAt(0) === 'E' // for the beginning or
myString.indexOf('E') !== -1 // for anywhere
这个简单操作的正则表达式是过度的。
答案 1 :(得分:5)
I'm trying to check if a string contains specific letters like E or F
正则表达式应该是:
/[EF]/.test('E22');
您的正则表达式^F?
使F成为可选项,对于任何输入都将返回true。
更新:这应该没有可选的锚?
//Case1
if (/^E/.test(stringContainsE)) ....
//Case2
if (/^F/.test(stringContainsF)) ....