为什么正则表达式在其匹配中包含空格

时间:2014-02-15 21:22:14

标签: javascript regex match space

我正在尝试匹配(一次或两次)固定|本地|滚动的任何实例 但我不想捕捉尾随空间。我以为我通过放入(?:... \ s *)来解决这个问题,但它仍在捕捉那个尾随空间。

例如:

这是我的正则表达式:

((?:(?:fixed|local|scroll)\s*){1,2})

这是字符串:

background: url("my image.jpg") left right 2px 50% 75% repeat scroll border-box padding-box;

以下是比赛:

`scroll `

预期:

`scroll`

顺便说一下,我使用以下网站测试我的正则表达式:

2 个答案:

答案 0 :(得分:2)

在您提供的正则表达式中,最外层组是唯一的捕获组,其中包含\s*

你可以尝试这样一些更长的东西:

(fixed|scroll|local)(\s+(fixed|scroll|local))?

出现(fixed|scroll|local)后跟一个可选的出现。像这样复制它会使事情变得更容易,因为它允许你说“空格在匹配之间有效但不在之后”。

另一种选择就是使用trim来以编程方式处理尾随空格。

答案 1 :(得分:1)

你可以这样做:

\s*((?:\s*?\b(?:fixed|local|scroll)\b){1,2})

\s*((?:\s*?(?:fixed|local|scroll)){1,2})

(如果不需要字边界)

说明:由于\s*默认为贪婪,因此所有前导空格都会在catpure组之前被“吃掉”。