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

时间:2015-11-27 09:37:38

标签: 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.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-1389610933954-2','div-ad-1389610933954-4','div-ad-1448278717664-0','div-ad-1425381569546-1']

的数组

所以我想尝试类似的事情:

var myregexp = /googletag.defineSlot+/g;
var match = myregexp.exec(x);
console.log(match);

但我知道正则表达式是错误的。我正在寻找的正确方法或模式。

提前致谢

4 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

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

对于变量String,您可以使用以下内容:

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

请参阅DEMO

答案 1 :(得分:2)

假设您可以依赖上一个div 中的div-ad'...',以下是您可以使用的代码和正则表达式:

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

请参阅regex demo

匹配:

  • googletag\.defineSlot - 字面上匹配googletag.defineSlot
  • .*? - 一个懒点匹配构造(这里很好用,因为字符串很短)尽可能少地匹配除换行符之外的任何字符
  • ' - 单撇号
  • (div[^']*) - 捕获与div匹配的第1组,后跟任何字符,但'
  • ' - 文字'

如果您可以在单引号中的最后一个参数中包含任何值,请使用

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

请参阅another demo



var re = /googletag\.defineSlot.*?'([^']*)'\);/g;
var str = 'googletag.defineSlot(\'Lorem1\', [300, 100], \'div-ad-1430201576110-0\');\ngoogletag.defineSlot(\'Lorem2\', [300, 100], \'div-ad-1442774220958-0\');\ngoogletag.defineSlot(\'Lorem3\', [300, 100], \'div-ad-1448024965037-0\');\ngoogletag.defineSlot(\'Lorem4\', [290, 60], \'div-ad-1429688274462-0\');\ngoogletag.defineSlot(\'Lorem5\', [300, 200], \'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\', [300, 250], \'div-ad-1389610933954-0\');\ngoogletag.defineSlot(\'Lorem9\', [300, 250], \'div-ad-1448278717664-0\');\ngoogletag.defineSlot(\'Lorem10\',[300, 250] \'div-ad-1425381569546-1\');\ngoogletag.defineOutOfPageSlot(\'Lorem11\',\'div-ad-1424524422308-0-oop1\');\ngoogletag.defineOutOfPageSlot(\'Lorem12\',\'div-ad-1424524422308-0-oop2\');\ngoogletag.defineOutOfPageSlot(\'Lorem13\',\'div-ad-1389610933954-0-oop4\');\ngoogletag.defineOutOfPageSlot(\'Lorem14\',\'div-ad-1389610933954-0-oop5\');\ngoogletag.defineOutOfPageSlot(\'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);

<pre id="result"></pre>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

试试这个..

var res = tStr.split(" ");

答案 3 :(得分:0)

您应该使用.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