使用javascript找到最后出现的字符

时间:2017-02-04 08:53:48

标签: javascript regex magento

我想知道以哪种方式从这段代码中取出“widget”表达式:

blablablalbadsj kds {{widget type="Magento\FooBard\Block\Widget\Script" wysywig_text="<img src='{{media url='wysiwyg/something.png'}}' alt='' />"}} ksakkdkkcxz {{media url='wysiwyg/something2.png'}}

最后,我想要那个:

{{widget type="Magento\FooBard\Block\Widget\Script" wysywig_text="<img src='{{media url='wysiwyg/something.png'}}' alt='' />"}}

我一直在考虑这个,我有这样的正则表达式:

/\{\{widget(.*?)\}}/

但这不起作用,它只是匹配:

{{widget type="Bold\Gtm\Block\Widget\Script" wysywig_text="<img src='{{media url='wysiwyg/compare_brightness.png'}}

不:alt =''/&gt;“

1 个答案:

答案 0 :(得分:2)

我的建议是不要使用Regexps,因为该字符串不是常规的。因此,尝试使用正则表达式解析它将是非常困难的。

var str =`blablablalbadsj kds {{widget type="Magento\FooBard\Block\Widget\Script" wysywig_text="<img src='{{media url='wysiwyg/something.png'}}' alt='' />"}} ksakkdkkcxz {{media url='wysiwyg/something2.png'}}`

var startWdigetPos = str.indexOf("{{widget"),endWidgetPost = 0;
const regex = /{{|}}/mg;


var openedTags=0;
var closedTags=0;
while ((m = regex.exec(str.substr(startWdigetPos))) !== null) {
      // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    if (m[0]=="{{"){
      openedTags++;
    }else if (m[0]="}}"){
      closedTags++;
      
    }
    if (openedTags === closedTags){
     endWidgetPost = regex.lastIndex ;
     break;
    }
    
}
if (endWidgetPost){
  console.log(str.substr(startWdigetPos,endWidgetPost));
}