Javascript正则表达式:匹配到或之间,但不包括
例如,我使用一个简单的正则表达式来匹配第一个空格之前的所有内容:Javascript正则表达式:匹配到或之间,但不包括,javascript,regex,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(' ', ''); 但是有更好的办法吗?我可以不在正则表达式中包含空格吗?另一个例子是在两个字符之间找到一些东西。假设我想在上面的字符
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(' ', '');
但是有更好的办法吗?我可以不在正则表达式中包含空格吗?另一个例子是在两个字符之间找到一些东西。假设我想在上面的字符串中间找到00个。< /P>
str.match(/:(.*?):/)[0]; //Returns :00: but I want 00
str.match(/:(.*?):/)[0].replace(':', ''); //Fixes it, but again...is there a better way?
是的,您可以使用:
您可以将正向前瞻断言用作:
(.*?)(?=\s)
这表示匹配空白前的所有内容,但不匹配空白本身。我认为您只需要将索引从0更改为1,如下所示:
str.match(/(.*?)\s/)[1]
0表示整个匹配字符串,1表示第一组,这正是您想要的
@Coddick给出了另一个解决方案
str.match(/(.*?)(?=\s)/)[0]
(?=\s)表示先行,但不使用空格,因此整个匹配字符串为“14:00:00”,但没有空格。您的代码与答案非常接近,只需将[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
希望对你有帮助 试试这个
.*(?=(\sGMT))
RegexBuddy屏幕截图
str.split(“”)[0]有什么问题?
.*(?=(\sGMT))