baptx baptx - 1 month ago 5
Javascript Question

SyntaxError: expected expression, got '.'

Does someone know where this JavaScript error comes from?

SyntaxError: expected expression, got '.'


I get this error when using a regular expression with a slash (escaped) like
el.href.match(/video\/(.*)@/)[1];
as a string passed to a function like createTextNode, textContent or innerHTML.

This regex works when not stored as text.
A regex without slash as text works, you can see my code example:

var script = document.createElement("script");
var text = `
(function() {
var id = el.href.match(/video\/(.*)@/)[1];
alert("test 4 - regex with slash as text: " + id);
})();`;

script.appendChild(document.createTextNode(text));


https://github.com/baptx/baptx.github.io/blob/master/get_m3u8_debug/get_m3u8_debug.htm

You can test it live on GitHub Pages (JSFiddle did not work in my case):

https://baptx.github.io/get_m3u8_debug/get_m3u8_debug.htm

Answer

You are escaping the forward slash instead of having a baskward slash.

`el.href.match(/video\/(.*)@/)[1]` === 'el.href.match(/video/(.*)@/)[1]'
// '\/' == '/', not '\\/'

You need to escape the backward slash as well:

`el.href.match(/video\\/(.*)@/)[1]`

What I would suggest to still use a regex literal would be to use it's .source:

var regex = /video\/(.*)@/
var text = `el.href.match(/${regex.source}/)[1]`
// Or:
var text = `el.href.match(/` + /video\/(.*)@/.source + `/)[1]`
Comments