我想知道以哪种方式从这段代码中取出“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;“
答案 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));
}