Javascript RegExp' *'没有按预期工作

时间:2015-05-16 15:00:50

标签: javascript jquery html regex

我有一个字符串。

var string="ghtykj";
var pattern = "t*y";

当我给出新的RegExp(pattern).test(string)时,它返回true(如预期的那样)。

var pattern = "t*g";

但这种模式也会返回true。

我期待这个模式返回false,因为t * g表示t后跟零个或多个字符,后跟g。

如果这确实是预期的行为,任何人都可以纠正我在哪里做错了吗?

4 个答案:

答案 0 :(得分:8)

*不是正则表达式中的通配符,而是量词。它与量词{0,}具有相同的含义,即指定其前面的表达式(在本例中为字符t)可以出现零次或多次。

模式t*g并不意味着t后跟零个或多个字符,后跟g。它表示零个或多个字符t,后跟一个g。

模式t*g将匹配例如tgtttttg,但也只是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,这是真的