(\ w)*和\ w之间的区别?

时间:2014-04-21 00:04:33

标签: javascript regex

我正在尝试研究正则表达式,我遇到了这种令人困惑的情况:

假设你有文字:

  

你好世界

如果你运行正则表达式(\ w)*,它会给出:

  

['你好','o']

我的期望是:

  

['你好','h']

不是指任何单词字符吗?

另一个例子

文本:

  

美味的蛋糕

(\ w)*输出:

  

['Delicious','s']

我的期望:

  

['Delicious','D']

5 个答案:

答案 0 :(得分:0)

山姆,为什么(\ w)*在第1组中对“美味”返回“s”的原因是,只能有一个第1组。每次新角色与(\ w)匹配时,括号强制要捕获到第1组中的字符的新值。“s”是最后一个字符,因此它是引擎向您报告的最终第1组。

如果您想要将第一个字母捕获到第1组中,您可以选择以下内容:

(\w)\w*

这会导致捕获第一个字符。捕获括号没有量词,因此组1不会改变。剩余的\w*可选地匹配任何其他字符。

另请注意,当你对“hello world”运行(\w)*时,匹配不是你所说的“你好”和“o”。比赛(如果你匹配它们)是“你好”和“世界”。第1组捕获的是“o”和“d”,即每个单词的最后一个字母。

参考:All about capture

答案 1 :(得分:0)

' *'将前一部分匹配零次或多次,并紧密绑定到左侧的元素。 示例:m * o将匹配o,mo,mmo,mmmmo等。 圆括号()用于标记子表达式,也称为捕获组。 所以(\ w)*重复捕获组。

Regex Demo

答案 2 :(得分:0)

请记住,重复捕获组始终捕获最后一组。

所以

(\w)*上的{p> hello将一次检查一个字符,除非它到达最后一个匹配。 因此,将在捕获组中获得o

(\w)*上的{p> helloworld将一次检查一个字符,除非它到达最后一个匹配。 因此,将在捕获组中获得d

(\w)*上的{p> hello123将一次检查一个字符,除非它到达最后一个匹配。 因此,将在捕获组中获得3

(\w)*上的{p> helloworld@3w4将一次检查一个字符,除非它到达最后一个匹配。因此,d不是有效@ ord字符(仅允许\w),因此会在捕获组中获得[_0-9a-zA-Z]

答案 3 :(得分:-1)

(\w)*

Match the regular expression below and capture its match into backreference number 1 «(\w)*»
   Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
   Note: You repeated the capturing group itself.  The group will capture only the last iteration.  Put a capturing group around the repeated group to capture all iterations. «*»
   Match a single character that is a “word character” (letters, digits, and underscores) «\w»

会给你两场比赛:
你好
世界

\w

Match a single character that is a “word character” (letters, digits, and underscores) «\w»

将匹配句子上的每个字符(单独):

ħ
Ë


Ø
w ^
Ø
[R

d

答案 4 :(得分:-1)

\w[_a-zA-Z0-9]的RegEx快捷方式,表示任何字母,数字或下划线。

在任何内容之后添加星号*时,表示它可以从0到无限次显示。

  • 如果您想匹配输入中的所有字母,请使用\w

  • 如果您想匹配输入中的整个字词,请使用\w+(使用+而不是*,因为一个字至少有一个字母)

此外,当您在RegEx中使用括号括起来时,它们会成为捕获组,这意味着它们会显示在您的结果中,这就是(\w)*(\w*)不同的原因


有用的RegEx网站: