Match()方法的正则表达式错误

时间:2018-09-20 03:51:56

标签: javascript regex

我正在使用正则表达式捕获URL字符串,但是无法正常工作。

这是我的代码,该代码来自外部JavaScript文档,并链接到HTML文件:

var url = 'The URL was www.google.com';
var urlRegEx = /((\bhttps?:\/\/)|(\bwww\.))\S*/;
var urlRegMatch = url.match(urlRegEx);
document.write(urlRegMatch);

我得到的输出是:“ www.google.com,www。,www。”

我在做什么错了?

谢谢! :)

2 个答案:

答案 0 :(得分:1)

您的正则表达式工作正常,发生的情况是,根据匹配功能,正则表达式中的每个组(由这些括号定义)都会得到一个额外的结果。要访问整个比赛,您可以访问比赛返回的第一项,如下所示:

var url = 'The URL was www.google.com';
var urlRegEx = /((\bhttps?:\/\/)|(\bwww\.))\S*/;
var urlRegMatch = url.match(urlRegEx)[0]; //this line changed, im using [0] to access the whole match only
document.write(urlRegMatch);

工作示例:https://jsfiddle.net/2sptg5rz/3/

有关匹配功能的参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match#Return_value

答案 1 :(得分:0)

我要感谢@Dknacht和@Tressa将我引导到正确的答案,因为数组的第一个值0是匹配的文本。

此代码适用于我想做的事情:

var url = 'The URL was www.google.com';
var urlRegEx = /((\bhttps?:\/\/)|(\bwww\.))\S*/
var urlRegMatch  = url.match(urlRegEx);
document.write(urlRegMatch[0]);