javascript 使用正则表达式或String.prototype.split方法从字符串中提取某些部分

tv6aics1  于 2022-12-28  发布在  Java
关注(0)|答案(1)|浏览(108)

我有下面的textarea元素有一些模板化的代码在它,它不能被修改,因为在博客中没有选项:

<textarea hidden class='hidden' id='tempJs'><script defer='' src='/js/cookienotice.js' type="976adfed5ff69a3a2e21c1d0-text/javascript"></script>

<script type="976adfed5ff69a3a2e21c1d0-text/javascript">

    document.addEventListener('DOMContentLoaded', function(event) {

      // Some JS

    });

  </script>

<script type="976adfed5ff69a3a2e21c1d0-text/javascript" src="https://www.blogger.com/static/v1/widgets/1197256859-widgets.js"></script>

<script type="976adfed5ff69a3a2e21c1d0-text/javascript">

window['__wavt'] = 'AOuZoY7izjkWOpen881b-llDDktDVnRQIQ:1672120416426';

//...Some JS

_WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML9', 'gmp_custom_script', document.getElementById('HTML9'), {}, 'displayModeFull'));

</script></textarea>

我想从textarea.innerText中提取以下代码部分:

window['__wavt'] = 'AOuZoY7izjkWOpen881b-llDDktDVnRQIQ:1672120416426';

//...Some JS

_WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML9', 'gmp_custom_script', document.getElementById('HTML9'), {}, 'displayModeFull'));

我尝试了以下方法:

<!--[ My Script ]-->

<script>

/*<![CDATA [*/

  let tempEl = document.getElementById("tempJs"),

  tempTx = tempEl.innerText,

  widgetJs = tempTx.split("<script type='text/javascript'>\n")[1].split("\n<\/script>")[0].trim();

tempEl.remove()

/*]]>*/

</script>

但是,问题是type属性一直在变化,而且还有四个script标记
我怎样才能从字符串中只提取出那一部分呢?

w9apscun

w9apscun1#

将textarea文本转换为一个文档,然后你可以选择所有的script标签,然后遍历它们的.textContent来识别引用了__wavt的标签。

// Your code
const doc = new DOMParser().parseFromString(
  document.querySelector('textarea').value,
  'text/html'
);
const script = [...doc.querySelectorAll('script')]
  .find(script => script.textContent.includes('__wavt'));
console.log(script.textContent);
<!-- Built-in code -->
<textarea hidden class='hidden' id='tempJs'><script defer='' src='/js/cookienotice.js' type="976adfed5ff69a3a2e21c1d0-text/javascript"></script>

<script type="976adfed5ff69a3a2e21c1d0-text/javascript">

    document.addEventListener('DOMContentLoaded', function(event) {

      // Some JS

    });

  </script>

<script type="976adfed5ff69a3a2e21c1d0-text/javascript" src="https://www.blogger.com/static/v1/widgets/1197256859-widgets.js"></script>

<script type="976adfed5ff69a3a2e21c1d0-text/javascript">

window['__wavt'] = 'AOuZoY7izjkWOpen881b-llDDktDVnRQIQ:1672120416426';

//...Some JS

_WidgetManager._RegisterWidget('_HTMLView', new _WidgetInfo('HTML9', 'gmp_custom_script', document.getElementById('HTML9'), {}, 'displayModeFull'));

</script></textarea>

相关问题