[英]Javascript RegExp ' * ' not working as expected
我有一个字符串。
var string="ghtykj";
var pattern = "t*y";
当我给出新的RegExp(pattern).test(string)时,它返回true(如预期的那样)。
var pattern = "t*g";
但这种模式也是如此。
我期待这个模式返回false,因为t * g表示t后跟零个或多个字符,后跟g。
如果这确实是预期的行为,任何人都可以纠正我在哪里做错了吗?
*
不是正则表达式中的通配符,是量词。 它与量词{0,}
具有相同的含义,即指定其前面的表达式(在本例中为字符t
)可以出现零次或多次。
模式t*g
并不意味着t后跟零个或更多个字符,后跟g。 它表示零个或多个字符t,后跟一个g。
模式t*g
将匹配例如tg
或tttttg
,但也只是g
。 因此,它匹配字符串开头的g
字符。
要获得匹配t后跟零个或多个字符的模式,然后使用g,您将使用t.*g
(或t[\\w\\W]*g
来处理字符串中的换行符)。
因为t * g表示t后跟零个或多个字符,后跟g。
这是不正确的。 这意味着0或更多t
,因此t
是可选的。
您可能会想到在终端shell中使用Globbing而不是Globbing,其中*
运算符可以按预期工作。 但Globbing *
与RegEx *
行为不同。
你要
var pattern = "t.*g";
这意味着, .
是可选的(0或更多实例),但必须有t
。
在正则表达式中.
匹配几乎任何角色 。
你应该在这里测试你的正则表达式: regex101 ,它会将你的正则表达式翻译成英文,这样更容易理解。
var pattern = "t.*g";
应该是对的。 t*
表示0或任意数量的t,这是真的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.