Since I started writing this question, I think I figured out the answers to every question I had, but I thought I’d post anyway, as it might be useful to others and more clarification might be helpful.
I was trying to use a regular expression with lookahead with the javascript function split. For some reason it was not splitting the string even though it finds a match when I call match. I originally thought the problem was from using lookahead in my regular expression. Here is a simplified example:
Doesn’t work:
"aaaaBaaaa".split("(?=B).");
Works:
"aaaaBaaaa".match("(?=B).");
It appears the problem was that in the split example, the passed string wasn’t being interpreted as a regular expression. Using forward slashes instead of quotes seems to fix the problem.
"aaaaBaaaa".split(/(?=B)./);
I confirmed my theory with the following silly looking example:
"aaaaaaaa(?=B).aaaaaaa".split("(?=B).");
Does anyone else think it’s strange that the match function assumes you have a regular expression while the split function does not?
String.splitaccepts either a string or regular expression as its first parameter. TheString.matchmethod only accepts a regular expression.I’d imagine that
String.matchwill try and work with whatever is passed; so if you pass a string it will interpret it as a regular expression. TheString.splitmethod doesn’t have the luxury of doing this because it can accept regular expressions AND strings; in this case it would be foolish to second-guess.Edit: (From: “JavaScript: The Definitive Guide”)
String.matchrequires a regular expression to work with. The passed argument needs to be aRegExpobject that specifies the pattern to be matched. If this argument is not aRegExp, it is first converted to one by passing it to theRegExp()constructor.