3v4l.org

run code in 300+ PHP versions simultaneously
<?php $html = <<<'HTML' <!DOCTYPE html> <html> <head> <script> let a=123; // comment // second comment let b='https://www.bbc.co.uk'; // This is a comment /* This is another comment */ // The following is not a comment var src="//google.com"; toolbar.querySelector('.toolbar-format_italic').addEventListener('click', function () { doInsertAtCursor(textarea, "///", "///"); doRefreshPreview(textarea); }.bind(_self)); /* Comment */ Prism.languages.javascript = Prism.languages.extend( regex: { pattern: RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"), lookbehind: !0, greedy: !0, inside: { "regex-source": { pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, lookbehind: !0, alias: "language-regex", inside: Prism.languages.regex }, "regex-delimiter": /^\/|\/$/, "regex-flags": /^[a-z]+$/ } }); </script> </head> <body> </body> </html> HTML; $dom = new DOMDocument; $dom->loadHTML($html); $scriptNodes = $dom->getElementsByTagName('script'); $pattern = <<<'EOD' ~ (?(DEFINE) (?<squoted> ' [^'\n\\]*+ (?: \\. [^'\n\\]* )*+ ' ) (?<dquoted> " [^"\n\\]*+ (?: \\. [^"\n\\]* )*+ " ) (?<tquoted> ` [^`\\]*+ (?s: \\. [^`\\]*)*+ ` ) (?<quoted> \g<squoted> | \g<dquoted> | \g<tquoted> ) (?<scomment> // \N* ) (?<mcomment> /\* [^*]*+ (?: \*+ (?!/) [^*]* )*+ \*/ ) (?<comment> \g<scomment> | \g<mcomment> ) (?<pattern> / [^\n/*] [^\n/\\]*+ (?>\\.[^\n/\\]*)* / [gimuy]* ) ) (?=[[(:,=/"'`]) (?| \g<quoted> (*SKIP)(*FAIL) | ( [[(:,=] \s* ) (*SKIP) (?: \g<comment> \s* )*+ ( \g<pattern> ) | ( \g<pattern> \s* ) (?: \g<comment> \s* )*+ ( \. \s* ) (?:\g<comment> \s* )*+ ([A-Za-z_]\w*) | \g<comment> ) ~x EOD; foreach ($scriptNodes as $scriptNode) { $scriptNode->nodeValue = preg_replace($pattern, '$9${10}${11}', $scriptNode->nodeValue); } $html = $dom->saveHTML(); echo $html; ?>
Output for 8.1.23 - 8.1.28, 8.2.9 - 8.2.19, 8.3.0 - 8.3.7
<!DOCTYPE html> <html> <head> <script> let a=123; let b='https://www.bbc.co.uk'; var src="//google.com"; toolbar.querySelector('.toolbar-format_italic').addEventListener('click', function () { doInsertAtCursor(textarea, "///", "///"); doRefreshPreview(textarea); }.bind(_self)); Prism.languages.javascript = Prism.languages.extend( regex: { pattern: RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"), lookbehind: !0, greedy: !0, inside: { "regex-source": { pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/, lookbehind: !0, alias: "language-regex", inside: Prism.languages.regex }, "regex-delimiter": /^\/|\/$/, "regex-flags": /^[a-z]+$/ } }); </script> </head> <body> </body> </html>

preferences:
48.27 ms | 404 KiB | 30 Q