2

例如,我使用一个简单的正则表达式来匹配第一个空格之前的所有内容:

var str = '14:00:00 GMT';
str.match(/(.*?)\s/)[0]; //Returns '14:00:00 ' note the space at the end

为了避免这种情况,我可以这样做:

str.match(/(.*?)\s/)[0].replace(' ', '');

但是有更好的方法吗?我可以不在正则表达式中包含空格吗?另一个例子是在 2 个字符之间找到一些东西。假设我想在上面的字符串中间找到 00。

str.match(/:(.*?):/)[0]; //Returns :00: but I want 00
str.match(/:(.*?):/)[0].replace(':', ''); //Fixes it, but again...is there a better way?
4

5 回答 5

2

您可以将积极的前瞻断言用作:

(.*?)(?=\s)

它说匹配空格之前的所有内容,但不匹配空格本身。

于 2012-09-27T05:12:29.303 回答
2

我认为你只需要将索引从 0 更改为 1,如下所示:

   str.match(/(.*?)\s/)[1]

0 表示整个匹配的字符串,1 表示第一组,这正是您想要的。

@codaddict 提供另一种解决方案。

str.match(/(.*?)(?=\s)/)[0]

(?=\s) 表示先行但不消耗空格,因此整个匹配的字符串是 '14:00:00' 但没有空格。

于 2012-09-27T05:26:37.120 回答
1

是的,您可以使用字符类

var str = '14:00:00 GMT';
str.match(/[^\s]*/)[0]; //matches everything except whitespace
于 2012-09-27T05:11:58.497 回答
0

您的代码非常接近答案,您只需将 [0] 替换为 [1]。当 str.match(/:(.*?):/) 执行时,它返回一个对象,在本例中,对象长度为 2,如下所示:

[":00:","00"]

在索引 0 中,它存储与您的表达式匹配的整个字符串,在索引 1 和更高版本中,它将与每个括号中的表达式匹配的结果存储。
让我们看另一个例子:

 var str = ":123abcABC:";
 var result = str.match(/:(\d{3})([a-z]{3})([A-Z]{3}):/);
 console.log(result[0]);
 console.log(result[1]);
 console.log(result[2]);
 console.log(result[3]);

结果:

:123abcABC: 
123 
abc 
ABC

希望它有帮助。

于 2012-09-27T05:40:11.817 回答
0

试试这个,

.*(?=(\sGMT))

正则表达式好友截图

在此处输入图像描述

于 2012-09-27T05:41:38.650 回答