我有一个字符串。
var string="ghtykj";
var pattern = "t*y";
当我给出新的RegExp(pattern).test(string)时,它返回true(如预期的那样)。
var pattern = "t*g";
但这种模式也会返回true。
我期待这个模式返回false,因为t * g表示t后跟零个或多个字符,后跟g。
如果这确实是预期的行为,任何人都可以纠正我在哪里做错了吗?
答案 0 :(得分:8)
*
不是正则表达式中的通配符,而是量词。它与量词{0,}
具有相同的含义,即指定其前面的表达式(在本例中为字符t
)可以出现零次或多次。
模式t*g
并不意味着t后跟零个或多个字符,后跟g。它表示零个或多个字符t,后跟一个g。
模式t*g
将匹配例如tg
或tttttg
,但也只是g
。因此,它匹配字符串开头的g
字符。
要获得匹配t后跟零个或多个字符的模式,然后使用g,您将使用t.*g
(或t[\w\W]*g
来处理字符串中的换行符。)
答案 1 :(得分:6)
因为t * g表示t后跟零个或多个字符,后跟g。
这是不正确的。这意味着0或更多t
,因此t
是可选的。
您可能会考虑在*
运算符按预期工作的终端shell中而不是Globbing。但是,Globbing *
与RegEx *
的行为不同。
你想要
var pattern = "t.*g";
这意味着,.
是可选的(0个或更多个实例),但必须有t
。
在正则表达式中,.
matches almost any character。
答案 2 :(得分:3)
你应该在这里测试你的正则表达式:regex101,它会将你的正则表达式翻译成英文,以便更容易理解。
答案 3 :(得分:1)
var pattern = "t.*g";
应该是对的。 t*
表示0或任意数量的t,这是真的