【问题标题】:Regular expression using shorthand character class使用速记字符类的正则表达式
【发布时间】:2013-12-28 01:58:13
【问题描述】:

我有:

var regex = /[\w ]*/;

var str = 'My name is Robeet';

var match = str.match( regex );

document.write(match);

它返回:

My name is Robeet 

这不应该是一个错误,因为全局搜索不包括“g”标志吗?

我用“g”标志试了一下,得到了完全相同的结果。

【问题讨论】:

  • 我不确定您所说的“这不应该是一个错误”是什么意思。你期待什么结果?

标签: javascript regex


【解决方案1】:

您的模式有一个零个或多个量词 (*),因此它将匹配任何 序列 的单词字符或空格。由于您的整个字符串都符合该标准,这正是您应该期望的。

为了比较,请尝试删除量词:

'My name is Robeet'.match(/[\w ]/); 
// ["M"];
'My name is Robeet'.match(/[\w ]/g);
// ["M", "y", " ", "n", "a", "m", "e", ...]

【讨论】:

  • 你会得到所有的字符串而不是零个字符,因为量词默认是贪婪的。
【解决方案2】:

来自W3Schools

g 修饰符用于执行全局匹配(查找所有匹配而不是在第一个匹配后停止)

这正是您的正则表达式正在做的事情。

没有 g 标志并不意味着您的正则表达式不再贪婪。它仍然会尝试找到最长可能的模式,只是不会在您的初始模式之后找到后续模式。

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 2015-05-26
    相关资源
    最近更新 更多