Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript-正则表达式匹配不是函数_Javascript - Fatal编程技术网

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

JavaScript-正则表达式匹配不是函数,javascript,Javascript,我试图找到一个加载到页面上的脚本,并从其名称中解析出一个查询参数值。我的以下设置已经过测试,并提取了页面上加载的所有资源的名称,但是当我试图提取与我的正则表达式字符串匹配的第一个实例时,我遇到了以下错误。从这个资源名称中,我想解析出在名称中找到的单个查询字符串参数的值 错误: Capture Snowplow Pixel:25 Uncaught TypeError: resourceArr.match is not a function at <anonymous>:25:3

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

错误:

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
资源名称示例:

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

您拥有的resourceArr是一个数组。match是String类上的一个实例方法。也许这就是为什么会出现这样的错误:resourceArr.match不是函数


您拥有的资源是一个数组。match是String类上的一个实例方法。也许这就是为什么会出现这样的错误:resourceArr.match不是函数


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

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

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

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

resourceArr
是一个
数组
,而不是
字符串
。尝试
resourceArr.find(函数(名称){return re.test(名称);})。匹配(re)
@PatrickRoberts,这是有效的。谢谢大家!
resourceArr
是一个
数组
,而不是
字符串
。尝试
resourceArr.find(函数(名称){return re.test(名称);})。匹配(re)
@PatrickRoberts,这是有效的。非常感谢。