Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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_Jquery_Regex - Fatal编程技术网

Javascript 如何从长字符串中提取多个子字符串

Javascript 如何从长字符串中提取多个子字符串,javascript,jquery,regex,Javascript,Jquery,Regex,我有一个长字符串,如下所示: var tStr = "googletag.defineSlot('Lorem1', [300, 100], 'div-ad-1430201576110-0'); googletag.defineSlot('Lorem2', [300, 100], 'div-ad-1442774220958-0'); googletag.defineSlot('Lorem3', [300, 100], 'div-ad-1448024965037-0'); googletag.def

我有一个长字符串,如下所示:

var tStr = "googletag.defineSlot('Lorem1', [300, 100], 'div-ad-1430201576110-0');
googletag.defineSlot('Lorem2', [300, 100], 'div-ad-1442774220958-0');
googletag.defineSlot('Lorem3', [300, 100], 'div-ad-1448024965037-0');
googletag.defineSlot('Lorem4', [290, 60], 'div-ad-1429688274462-0');
googletag.defineSlot('Lorem5', [300, 200], 'div-ad-1448279284710-0');
googletag.defineSlot('Lorem6', [728, 90], 'div-ad-1389610933954-2');
googletag.defineSlot('Lorem7', [728, 90], 'div-ad-1389610933954-4');
googletag.defineSlot('Lorem8', [300, 250], 'div-ad-1389610933954-0');
googletag.defineSlot('Lorem9', [300, 250], 'div-ad-1448278717664-0');
googletag.defineSlot('Lorem10',[300, 250] 'div-ad-1425381569546-1');
googletag.defineOutOfPageSlot('Lorem11','div-ad-1424524422308-0-oop1');
googletag.defineOutOfPageSlot('Lorem12','div-ad-1424524422308-0-oop2');
googletag.defineOutOfPageSlot('Lorem13','div-ad-1389610933954-0-oop4');
googletag.defineOutOfPageSlot('Lorem14','div-ad-1389610933954-0-oop5');
googletag.defineOutOfPageSlot('Lorem15','div-ad-1389610933954-0-oop6');";
从这个字符串中,我需要获取googletag.defineSlot()中传递的所有最后一个元素。 例如,对于上面的字符串,我需要得到一个数组,它应该有
['div-ad-1430201576110-0','div-ad-1442774220958-0','div-ad-1448024965037-0','div-ad-1429688274462-0','div-ad-1448279284710-0','div-ad-138910933954-2','div-ad-1389610933954-4','div-ad-1448278717664-0','div-ad-538146'>

所以我试着说:

var myregexp = /googletag.defineSlot+/g;
var match = myregexp.exec(x);
console.log(match);
但我知道正则表达式模式是错误的。我正在寻找的正确方法或模式

提前谢谢你试试这个

var res = tStr.split(" ");

您可以使用以下选项:

var myregexp = /googletag\.defineSlot.*?'(div-ad[^']+)'/g;
var myregexp = /googletag\.defineSlot.*?'([^']+)'\);/
对于变量字符串,可以使用以下命令:

var myregexp = /googletag\.defineSlot.*?'(div-ad[^']+)'/g;
var myregexp = /googletag\.defineSlot.*?'([^']+)'\);/

请参见您应该使用
.split

var tStr = "googletag.defineSlot('Lorem1', [300, 100], 'div-ad-1430201576110-0');
googletag.defineSlot('Lorem2', [300, 100], 'div-ad-1442774220958-0');
googletag.defineSlot('Lorem3', [300, 100], 'div-ad-1448024965037-0');
googletag.defineSlot('Lorem4', [290, 60], 'div-ad-1429688274462-0');
googletag.defineSlot('Lorem5', [300, 200], 'div-ad-1448279284710-0');
googletag.defineSlot('Lorem6', [728, 90], 'div-ad-1389610933954-2');
googletag.defineSlot('Lorem7', [728, 90], 'div-ad-1389610933954-4');
googletag.defineSlot('Lorem8', [300, 250], 'div-ad-1389610933954-0');
googletag.defineSlot('Lorem9', [300, 250], 'div-ad-1448278717664-0');
googletag.defineSlot('Lorem10',[300, 250] 'div-ad-1425381569546-1');
googletag.defineOutOfPageSlot('Lorem11','div-ad-1424524422308-0-oop1');
googletag.defineOutOfPageSlot('Lorem12','div-ad-1424524422308-0-oop2');
googletag.defineOutOfPageSlot('Lorem13','div-ad-1389610933954-0-oop4');
googletag.defineOutOfPageSlot('Lorem14','div-ad-1389610933954-0-oop5');
googletag.defineOutOfPageSlot('Lorem15','div-ad-1389610933954-0-oop6');";


var arr = tStr.split("');");
var param = [];
[].forEach.call(arr, function(inst){
   var p = inst.split(", '");
   param.push(p[p.length-1]);
})

// Now p is the array you want
假设您可以依赖上一个
“…”
中的
div
div ad
,下面是您可以使用的代码和正则表达式:

/googletag\.defineSlot.*?'(div[^']*)'/g

它匹配:

  • googletag\.defineSlot
    -字面上匹配
    googletag.defineSlot
  • *?
    -一种惰性点匹配结构(这里使用它很好,因为字符串很短),它尽可能少地匹配除换行符以外的任何字符
  • -单撇号
  • (div[^']*)
    -捕获组1匹配的
    div
    ,后跟除
    以外的任何字符。
  • -一个文本
如果在单引号内的最后一个参数中可以有任何值,请使用

googletag\.defineSlot.*?'([^']*)'\);

var re=/googletag\.defineSlot.*?'([^']*)\)/G
var str='googletag.defineSlot(\'Lorem1\',[300100],\'div-ad-1430201576110-0\')\ngoogletag.defineSlot(\'Lorem2\',[300100],\'div-ad-1442774220958-0\')\ngoogletag.定义批次(\'Lorem3\',[300100],\'div-ad-1448024965037-0\')\ngoogletag.defineSlot(\'Lorem4\',[290,60],\'div-ad-1429688274462-0\')\ngoogletag.defineSlot(\'Lorem5\',[300200],\'div-ad-1448279284710-0\')\ngoogletag.defineSlot(\'Lorem6\',[728,90],\'div-ad-1389610933954-2\')\ngoogletag.defineSlot(\'Lorem7\',[728,90],\'div-ad-1389610933954-4\')\ngoogletag.defineSlot(\'Lorem8\',[300250],\'div-ad-1389610933954-0\')\ngoogletag.defineSlot(\'Lorem9\',[300250],\'div-ad-1448278717664-0\')\ngoogletag.defineSlot(\'Lorem10\',[300250]\'div-ad-1425381569546-1\')\ngoogletag.defineoutopageslot(\'Lorem11\',\'div-ad-1424524422308-0-oop1\')\ngoogletag.defineoutopageslot(\'Lorem12\',\'div-ad-1424524422308-0-oop2\')\ngoogletag.defineoutopageslot(\'Lorem13\',\'div-ad-1389610933954-0-oop4\')\ngoogletag.defineoutopageslot(\'Lorem14\',\'div-ad-1389610933954-0-oop5\')\ngoogletag.defineoutopageslot(\'Lorem15\',\'div-ad-1389610933954-0-oop6\');
var-m;
var-ar=[];
while((m=re.exec(str))!==null){
ar.push(m[1]);
}
document.getElementById('result').innerHTML=JSON.stringify(ar,0,4)

并且字符串可能是动态的,可以change@Tushar:我知道还有另一种方法,我刚刚添加了另一个正则表达式解决方案。这个问题只是有点不清楚,所以我试图涵盖所有的可能性。