1

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.

3 Answers 3

2

Remove the quotations:

pattern = /(\d{1,4}([.\-/])\d{1,2}([.\-/])\d{1,4})/g;

myDate = "01-01-2021".match(pattern);

console.log(myDate);

Sign up to request clarification or add additional context in comments.

1 Comment

lol, literally got this at same time :D thanks for quick repsonse.
1

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"));

Comments

0

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);
                

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.