正则表达式,用于检查字符串是否包含有效的脚本标签

时间:2019-09-26 23:26:37

标签: javascript regex

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

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

由于存在有效的脚本标记,因此使用regex测试方法测试此字符串(在这种情况下为页面的HTML源)应该返回true。同样,带有有效脚本标签的URL,例如:

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

也应该返回true。但是,类似

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

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

任何有关如何解决此问题的建议将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:3)

使用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 是安全的-脚本标记的内容在解析期间不会执行。

答案 1 :(得分:0)

您可以使用JavaScript字符串匹配...

let str = 'abcdefi<script>jfdjjdjd'; 
let  valueToLookFor = /script/g
let isItThere = str.match(valueToLookFor);
isItThere ? console.log('Yes'):console.log('No') //yes

let str = 'abcdefijfdjjdjd'; 
let  valueToLookFor = /script/g
let isItThere = str.match(valueToLookFor);
isItThere ? console.log('Yes'):console.log('No') //no

答案 2 :(得分:0)

这应该做到。

/(<script\s*>\w.+<\/script\s*>)|(<script\s*src\s*=\s*"[A-Za-z0-9]+\.js"\s*><\/script\s*>)/g

regexr

中尝试一下