问题

我正在尝试创建一个正则表达式,测试给定字符串是否有效的脚本标记.例如,如果页面包含在其中

 <body>Body goes here</body>
<script src = "page.js"></script>
 

使用正则表达式测试方法测试此字符串(本例中页面的HTML源代码)应返回true,因为有效的脚本标记.类似地,具有有效脚本标记的URL,如:

 https://url.com/something.php?getp=<script>func();</script>
 

也应该返回true.但是,类似于:

 https://url.com/something.php?getp=<script</script>
 

应该返回false,因为它不是有效的脚本标记.

关于如何解决这个问题的任何建议将不胜感激.谢谢!

  最佳答案

使用DOMParser将字符串转换为文档,然后使用querySelector,检查文档是否有任何script标签:

 const hasScript = str => Boolean(
  new DOMParser().parseFromString(str, 'text/html').querySelector('script')
);

console.log(hasScript('https://url.com/something.php?getp=<script<\/script>'));
console.log(hasScript('https://url.com/something.php?getp=<script><\/script>'));
console.log(hasScript(`<body>Body goes here</body>
<script src = "page.js"><\/script>`));
console.log(hasScript('https://url.com/something.php?getp=<script>func();<\/script>')); 

DomParser是安全的 – 解析过程中不会执行脚本标签的内容.

  相同标签的其他问题

javascriptregex