I have a weird case with a regular expression in javascript:
var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.test("foo"); // return false
Is a regular expression type sensitive? My first goal is to extract all word (separated by one or more whitespace) of a string.
Thanks for your help.
Julien
When using the g
flag on a Javascript regular expression, it will keep track of where the last match was found and start searching from that index the next time you try to find a match.
Between the two re.test()
calls, take a look at re.lastIndex
to see what I am talking about.
For example:
var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.lastIndex; // 3
re.test("foo"); // return false
You will notice that the type of quotes you use does not matter, re.test('foo'); re.test('foo');
will have the same behavior.
If you want the regex to start fresh, you can either remove the global flag from your regex or set re.lastIndex
to 0
after each attempt to find a match, for example:
var re = /[^\s]+(?:\s+|$)/g;
re.test('foo'); // return true
re.lastIndex = 0;
re.test("foo"); // return true
The alternating noted by Blender in comments can be explained because lastIndex
is automatically set to 0
when a match fails, so the next attempt after the failure will succeed.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With