JavaScript - 正则表达式匹配不是一个函数

时间:2018-02-13 20:26:34

标签: javascript

我正在尝试查找在页面上加载的脚本,并从其名称中解析出查询参数值。我的以下设置已经过测试,并提取了页面上加载的所有资源的名称,但是当我尝试拉出匹配我的正则表达式字符串的第一个实例时,我遇到了以下错误。从这个资源名称,我想解析名称中找到的单个查询字符串参数的值。

错误:

Capture Snowplow Pixel:25 Uncaught TypeError: resourceArr.match is not a function
    at <anonymous>:25:36

代码:

//Query String Parser
var getQueryString = function ( field, url ) {
    var href = url ? url : window.location.href;
    var reg = new RegExp( '[?&]' + field + '=([^&#]*)', 'i' );
    var string = reg.exec(href);
    return string ? string[1] : null;
};

//Results Array
var resourceArr = [];

//Store Loaded Resources
var resource = window.performance.getEntriesByType("resource");

//Store Names of Loaded Resources
var resourceName = resource.forEach(function(resource){
   return resourceArr.push(resource.name);
 });

console.log(typeof resourceArr);
//RegEx Looking for Snowplow Pixel
 var re = /.*events\.fivetran\.com\/snowplow\/.*\/i\?e=pv.*/i;

//Grab First Snowplow Pixel
var snowplowPixelUrl = resourceArr.match(re);

//Store eid from Snowplow Pixel
var eid = getQueryString(eid, snowplowPixelUrl)

console.log(eid);

资源名称示例:

https://events.fivetran.com/snowplow/2j32424h2h4/i?e=pv&url=....&eid=j2447

2 个答案:

答案 0 :(得分:2)

您拥有的resourceArr是一个数组。 match是String类的实例方法。也许这就是为什么你得到的错误,说resourceArr.match不是一个函数。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match

答案 1 :(得分:0)

正如我在评论中指出的,resourceArr不是字符串,它是一个数组,因此它没有.match()方法。首先,您需要找到与正则表达式匹配的字符串,然后在其上调用.match()Array.prototype.find()就是这样,但要支持旧浏览器,您需要使用this polyfill。以下是纠正代码的方法:

var snowplowPixelUrl = resourceArr.find(function (name) {
  return re.test(name);
}).match(re);