例如,我使用一个简单的正则表达式匹配第一个空格之前的所有内容:
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?
答案 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