Выражение регулярного выражения для проверки, содержит ли строка допустимый тег сценария - PullRequest
1 голос
/ 27 сентября 2019

Я пытаюсь создать выражение регулярного выражения, которое проверяет, имеет ли данная строка допустимый тег сценария.Если, например, страница содержит в себе

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

Тестирование этой строки (в данном случае источника HTML страницы) с помощью метода regex test должно возвращать true, поскольку существует допустимый тег script.Аналогично, URL с допустимым тегом скрипта, например:

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

, также должен возвращать true.Однако что-то вроде:

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

должно возвращать false, поскольку это недопустимый тег сценария.

Буду признателен за любой совет, как это сделать.Спасибо!

Ответы [ 3 ]

3 голосов
/ 27 сентября 2019

Используйте 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 безопасен - содержимое тегов сценария не будет выполняться во время синтаксического анализа.

0 голосов
/ 27 сентября 2019

Это должно сделать это.

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

Попробуйте это в regexr

0 голосов
/ 27 сентября 2019

Вы можете использовать строковое совпадение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...