I have this code that works.
myDate = str.match(/(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})/g);
However I would like to store the expression as a variable and use that instead. Something like this:
pattern = "/(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})/g"; // I understand this is wrong somehow
myDate = str.match(pattern);
How do I store my expression as a variable and use it the way I have shown?
Thanks in advance.
CodePudding user response:
Remove the quotations:
pattern = /(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})/g;
myDate = "01-01-2021".match(pattern);
console.log(myDate);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>
CodePudding user response:
As with most things in JavaScript, a Regular Expression pattern is an object - specifically, a RegExp object. As explained in MDN:
There are two ways to create a RegExp object: a literal notation and a constructor.
- The literal notation's parameters are enclosed between slashes and do not use quotation marks.
- The constructor function's parameters are not enclosed between slashes but do use quotation marks.
The additional point relevant to your example is that the g
flag is added on the end of the literal notation, but as a separate parameter in the constructor function. So either of the following will work:
pattern = /(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})/g;
pattern = new RegExp('\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})', 'g');
The reason your attempt didn't give an error, but didn't match the string is explained on the MDN page for the match
function:
If regexp is a non-RegExp object, it is implicitly converted to a RegExp by using new RegExp(regexp).
So your code was equivalent to this:
pattern = "/(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})/g";
myDate = str.match(new RegExp(pattern));
When what you wanted was this:
pattern = "(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})";
myDate = str.match(new RegExp(pattern, "g"));
CodePudding user response:
Ok, after playing about I got it to work by taking the qoutation marks away by doing this.
var pattern=/(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})/g;
myDate = str.match(pattern);