繁体   English   中英

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

[英]Regex expression for checking if a string contains a valid script tag

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

<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,因为它不是有效的脚本标签。

任何有关如何 go 的建议将不胜感激。 谢谢!

使用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安全的——脚本标签的内容在解析过程中不会被执行。

您可以使用 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

这应该这样做。

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

正则表达式中试试这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM