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.split
accepts either a string or regular expression as its first parameter. The String.match
method only accepts a regular expression.
I'd imagine that String.match
will try and work with whatever is passed; so if you pass a string it will interpret it as a regular expression. The String.split
method 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.match
requires a regular expression to work with. The passed argument needs to be a RegExp
object that specifies the pattern to be matched. If this argument is not a RegExp
, it is first converted to one by passing it to the RegExp()
constructor.
If I recall correctly (and I could be very wrong here), the split method was implemented in javascript before the regex engine was in wide use, so it's presumably for backward compatibility.
来源:https://stackoverflow.com/questions/812144/javascript-wont-split-using-regex