使用jquery获取两个字符串之间的字符串

使用jquery获取两个字符串之间的字符串,jquery,attributes,image,extract,src,Jquery,Attributes,Image,Extract,Src,如果我有这个HTML <div class="comment-body"> [img]http://topnews.net.nz/images/YouTube-3.jpg[/img] random text here </div> <div class="comment-body"> [img]http://blog.brightcove.com/sites/all/uploads/FACEBOOK%20ICON.png[/img] random text

如果我有这个HTML

<div class="comment-body">
[img]http://topnews.net.nz/images/YouTube-3.jpg[/img] random text here
</div>

<div class="comment-body">
[img]http://blog.brightcove.com/sites/all/uploads/FACEBOOK%20ICON.png[/img] random text here
</div>
对于我所做的尝试,我没有任何东西可以提供,因为我不知道如何提取
[img]
[/img]
之间的值

但总的来说,是我试图实现的目标,如果它没有意义的话

经过测试,现在可以正常工作(原始版本没有遍历所有
。注释正文
元素,或者正确查找
子字符串()
):


编辑了,因为我觉得有点无聊,所以将上面的内容变成了一个更通用的函数:

var divString, imgString;
$('.comment-body').each(
    function(){
        divString = $(this).text();
        imgString = divString.substring(divString.indexOf('[img]') + 5,divString.indexOf('[/img]'));
        console.log(imgString);
    });


参考资料:

  • jQuery材料:
  • JavaScript(全部在以下位置:
经过测试,现在可以正常工作(原始版本没有遍历所有
。请注释body
元素,或者正确查找
子字符串()
):


编辑了,因为我觉得有点无聊,所以将上面的内容变成了一个更通用的函数:

var divString, imgString;
$('.comment-body').each(
    function(){
        divString = $(this).text();
        imgString = divString.substring(divString.indexOf('[img]') + 5,divString.indexOf('[/img]'));
        console.log(imgString);
    });


参考资料:

  • jQuery材料:
  • JavaScript(全部在以下位置:

大卫·托马斯的另一个答案

实现此代码的另一种方法是使用正则表达式

function findStringBetween(elem,bbTagStart,bbTagClose){
    var tag = bbTagStart;

    function impliedEndTag(tag){
        var impliedEnd = tag.replace(tag.substring(0,1),tag.substring(0,1) + '/');
        return impliedEnd;
    }

    var endTag = bbTagClose || impliedEndTag(tag);
    var divString = $(elem).text().trim();

    if (divString.indexOf(tag) != -1){
        var elemInfo = [];
        elemInfo.imgString = divString.substring(divString.indexOf(tag) + tag.length,divString.indexOf(endTag));
        elemInfo.text = divString.replace(tag + elemInfo.imgString + endTag, '');
        return elemInfo;
    }
    else {
        return false;
    }
}
$('.comment-body').each(
    function(){
        /* call with two, or three arguments (the third is the optional 'bbTagClose':
            1. elem = this, the DOM node,
            2. '[img]' = whatever bbCode thing you want to use (I'm not sure what's available),
            3. 'bbTagClose' = the end tag of the bbCode, assuming that the end-tag is the same as
                the opening tag, except with a '/' as the second character, the impliedEndTag() function
                will take care of it for you.
        */
       var elemInfo = findStringBetween(this,'[img]');
        if (elemInfo.imgString){
            // or .prepend() if you prefer
            $(this).text(elemInfo.text).append('<img src="' + elemInfo.imgString + '" class="commentimg" data-src2="'+ elemInfo.imgString +'"/>');
        }
    });

var replacedText=replaceText($this.text(),'img','');

大卫·托马斯的另一个答案

实现此代码的另一种方法是使用正则表达式

function findStringBetween(elem,bbTagStart,bbTagClose){
    var tag = bbTagStart;

    function impliedEndTag(tag){
        var impliedEnd = tag.replace(tag.substring(0,1),tag.substring(0,1) + '/');
        return impliedEnd;
    }

    var endTag = bbTagClose || impliedEndTag(tag);
    var divString = $(elem).text().trim();

    if (divString.indexOf(tag) != -1){
        var elemInfo = [];
        elemInfo.imgString = divString.substring(divString.indexOf(tag) + tag.length,divString.indexOf(endTag));
        elemInfo.text = divString.replace(tag + elemInfo.imgString + endTag, '');
        return elemInfo;
    }
    else {
        return false;
    }
}
$('.comment-body').each(
    function(){
        /* call with two, or three arguments (the third is the optional 'bbTagClose':
            1. elem = this, the DOM node,
            2. '[img]' = whatever bbCode thing you want to use (I'm not sure what's available),
            3. 'bbTagClose' = the end tag of the bbCode, assuming that the end-tag is the same as
                the opening tag, except with a '/' as the second character, the impliedEndTag() function
                will take care of it for you.
        */
       var elemInfo = findStringBetween(this,'[img]');
        if (elemInfo.imgString){
            // or .prepend() if you prefer
            $(this).text(elemInfo.text).append('<img src="' + elemInfo.imgString + '" class="commentimg" data-src2="'+ elemInfo.imgString +'"/>');
        }
    });

var replacedText=replaceText($this.text(),'img','');

此函数可在任何字符串中查找任何给定的BBCODE,如果需要,您可以将其配置为替换或从这些BBCODE中提取内容作为数组

  var replacedText = replaceText($this.text(), 'img', '<img src="samesrc" class="commentimg" data-src2="$1" \/>');
//搜索str
var search\u str=“我喜欢这个[img]问题。png[/img]花,[img]答案\u 1-1.png[/img]你说的是[img]答案\u 2-1.png[/img]很好。”
//举例
var str=bbcode_search_and_replace($(“#search_str”).text(),“[img]”,“[/img]”;
$('search_str').html(str);
功能bbcode_search_和_replace(搜索_str、bb_opening_标签、bb_closing_标签){
//搜索str长度
var sLength=字符串(search_str).length;
//bbcode开始标记长度
var fPart_length=字符串(bb_开始标签)。长度;
//bbcode结束标记长度
var ePart_length=字符串(bb_closing_标记);
//打开标签的位置索引
var start_idx=0;
//结束标记的位置索引
var end_idx=0;
//开始标记的搜索索引
var pos_sIdx=0;
//结束标记的位置索引
var pos_eIdx=0;
//变量替换=“[image]”;
var-arr=[];
var-idx=0;
//环路
while(start_idx!=-1){
arr[idx]={};
start\u idx=String(search\u str).indexOf(bb\u opening\u tag,pos\u sIdx);
//检查是否结束
如果(开始_idx==-1){
//如果存在,关闭标记后的最后一个str
如果(idx>0)arr[idx]['str']=search\u str.子字符串(pos\u sIdx);
log(“arr[idx]['str']=”+arr[idx]['str']);
打破
}
//末端位置索引
pos_eIdx=开始_idx+fPart_长度;
end_idx=String(search_str).indexOf(bb_closing_标记,pos_eIdx);
//将str保存在bbtags中
arr[idx]['str']=搜索str.子字符串(pos\u sIdx,start\u idx);
log(“arr[idx]['str']=”+arr[idx]['str']);
arr[idx]['src']='';
log(“arr[idx]['src']=”+arr[idx]['src']);
arr[idx]['pos\u start']=起始idx+fPart\u长度;
arr[idx]['pos_end']=end_idx;
//更新数组和启动pos索引
idx++;
pos_sIdx=端部idx+端部长度;
}
var k=0;
var str=“”;
而(k
此函数可在任何字符串中查找任何给定的BBCODE,如果需要,您可以将其配置为替换或从这些BBCODE中提取内容作为数组

  var replacedText = replaceText($this.text(), 'img', '<img src="samesrc" class="commentimg" data-src2="$1" \/>');
//搜索str
var search\u str=“我喜欢这个[img]问题。png[/img]花,[img]答案\u 1-1.png[/img]你说的是[img]答案\u 2-1.png[/img]很好。”
//举例
var str=bbcode_search_and_replace($(“#search_str”).text(),“[img]”,“[/img]”;
$('search_str').html(str);
功能bbcode_search_和_replace(搜索_str、bb_opening_标签、bb_closing_标签){
//搜索str长度
var sLength=字符串(search_str).length;
//bbcode开始标记长度
var fPart_length=字符串(bb_开始标签)。长度;
//bbcode结束标记长度
var ePart_length=字符串(bb_closing_标记);
//打开标签的位置索引
var start_idx=0;
//结束标记的位置索引
var end_idx=0;
//开始标记的搜索索引
var pos_sIdx=0;
//结束标记的位置索引
var pos_eIdx=0;
//变量替换=“[image]”;
var-arr=[];
var-idx=0;
//环路
while(start_idx!=-1){
arr[idx]={};
start\u idx=String(search\u str).indexOf(bb\u opening\u tag,pos\u sIdx);
  var replacedText = replaceText($this.text(), 'img', '<img src="$1" \/>');
  var replacedText = replaceText($this.text(), 'img', '<img src="samesrc" class="commentimg" data-src2="$1" \/>');
//search str 
var search_str = "I love this [img]question.png[/img] Flowers, and [img]answer_1-1.png[/img] you say is that [img]answer_2-1.png[/img] good Point."
//using example
var str = bbcode_search_and_replace($('#search_str').text(),"[img]","[/img]");
$('#search_str').html(str);

function bbcode_search_and_replace(search_str, bb_opening_tag, bb_closing_tag) {
            //search str length
           var sLength = String(search_str).length;
           //bbcode opening tag length
           var fPart_length = String(bb_opening_tag).length;
           //bbcode closing tag length
           var ePart_length = String(bb_closing_tag).length;
           //position index for opening tag 
           var start_idx = 0;
           //position index for closing tag 
           var end_idx = 0; 
           //searching index for opening tag
           var pos_sIdx = 0;
           //position index for closing tag
           var pos_eIdx = 0;
           //var replacement = '[image]';
           var arr = [];
           var idx = 0;           

           //loop
           while(start_idx !== -1) {
               arr[idx] = {};                  

               start_idx = String(search_str).indexOf(bb_opening_tag,pos_sIdx);
               //check for ending
               if(start_idx === -1) {
                   //if exist, last str after closing tag
                   if(idx > 0) arr[idx]['str'] = search_str.substring(pos_sIdx);
                   console.log("arr[idx]['str'] = " + arr[idx]['str']);
                   break;
               }
               //end position index
               pos_eIdx = start_idx + fPart_length;
               end_idx = String(search_str).indexOf(bb_closing_tag,pos_eIdx);                   
               //save str inside bbtags
               arr[idx]['str'] = search_str.substring(pos_sIdx, start_idx);
               console.log("arr[idx]['str'] = " + arr[idx]['str']);
               arr[idx]['src'] =  "<img src = 'img/" + search_str.substring(start_idx + fPart_length, end_idx) + "' />";
               console.log("arr[idx]['src'] = " + arr[idx]['src']);
               arr[idx]['pos_start'] = start_idx + fPart_length;
               arr[idx]['pos_end'] = end_idx;                                

               //Update array and start pos indexes
               idx++;
               pos_sIdx = end_idx + ePart_length;                
          }

           var k = 0;
           var str = "";
           while(k < arr.length) {
               if(arr[k]['src'] === undefined) arr[k]['src'] = "";
               str += arr[k]['str'] + arr[k]['src'];
               k++;
           }

           return str;
        }  
<script type="text/javascript">
   var myStr = "The quick brown fox jumps over the lazy dog.";
   var subStr = myStr.match("quick(.*)lazy");
   alert(subStr[1]);
</script>