使用正则表达式解析字符串并将结果存储在数组或字符串中

时间:2015-12-12 11:13:23

标签: javascript regex

我需要一些帮助来改进我的代码:

我是正则表达式系统的初学者。

我想在脚本中编写下面的NUMBER并将其存储在字符串或数组中,以便输出" NUMBER1 ,NUMBER1_NUMBER2_,NUMBER2"我不明白为什么,我最后想要jsut NUMBER;

function fetchnumber(){
    extract = "";
    for(picture = 1 ; picture < 5; picture++){

 // get background image as a string as this :

 // url('http://www.mywebsite.com/directory/image_NUMBER_.png');

       var NumberOfPicture = document.getElementById(picture).style.backgroundImage ;


       reg = /\_(.*)\_/;
         extract += reg.exec(NumberOfPicture);


       }
     } 

1 个答案:

答案 0 :(得分:0)

我为你写了这个小例子。希望这对你有所帮助。

var inputString = 'http://www.mywebsite.com/directory/image_123_.png';
var imageNumber = (/image_([^_]+)_\.\w{3}$/.exec(inputString) || [,false])[1];
// so into imageNumber variable you will have a 123 or false if there is no mach
if (imageNumber) {
   // here you can do something with finded 
   // part of text. 
}

祝你好运。

你问为什么有[1]而不是[0]。解释是我们需要的 当没有正则表达式匹配时的相同行为。这是来自MDN的报价

  

exec()方法执行搜索指定字符串中的匹配项。   返回结果数组,或null。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec

因此。如果正则表达式匹配,则返回的数组将包含 来自位于零索引([0])的匹配字符串和第一个索引[1]处的第一个反向引用,后引用是括号(sddsd)之间的符号。但是如果没有匹配,我们将[,false]作为输出传递,所以我们期待结果 进入第一个数组索引[1]。尝试使用不同输入的代码。例如:

var inputString = 'some text some text ';
var imageNumber = (/image_([^_]+)_\.\w{3}$/.exec(inputString) || [,false])[1];
// so into imageNumber variable you will have a 123 or false if there is no mach
if (imageNumber) {
   // here you can do something with finded 
   // part of text. 
}

所以......在这种情况下,条件根本不会被执行。我的意思是:

if (imageNumber) {
   // here you can do something with finded 
   // part of text. 
}