Javascript正则表达式:匹配或之间但不包括

时间:2012-09-27 05:07:20

标签: javascript regex

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

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?

5 个答案:

答案 0 :(得分:2)

您可以使用正向前瞻断言:

(.*?)(?=\s)

表示匹配空白之前但与空白本身不匹配的所有内容。

答案 1 :(得分:2)

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

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

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

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

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

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

答案 2 :(得分:1)

是的,您可以使用character classes

var str = '14:00:00 GMT';
str.match(/[^\s]*/)[0]; //matches everything except whitespace

答案 3 :(得分: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

希望它有用。

答案 4 :(得分:0)

试试这个,

.*(?=(\sGMT))

RegexBuddy ScreenShot

enter image description here