(? =exp)
Baidu Encyclopedia to explain: non-get matching, positive pre-check, at any match pattern at the beginning of the string to match the search string, the match does not need to obtain for later use. For example, "Windows (? =95|98| nt|2000) "Can match" windows "in" Windows2000 ", but does not match" windows "in" Windows3.1 ". Pre-checking does not consume characters, that is, after a match occurs, the next matching search starts immediately after the last match, rather than starting with the character that contains the pre-check.
Look at this, I'm afraid I can not understand the whole life.
Let's look at a case:
// results: ["123", "456"]
Explain:
First to satisfy: \d{1,3} this regular.
1th Step: The start of 1 satisfies \d{1,3} maximum match, the latter 23456789.56 does not meet (? = (\d{3}) + (\.\d*)? $), so this "1" is not satisfied.
2nd step: The start of 12 satisfies \d{1,3} maximum match, the latter 3456789.56 does not meet (? = (\d{3}) + (\.\d*)? $), so this "12" is not satisfied.
3rd Step: The beginning of the 123 satisfies \d{1,3} maximum match, the following 456789.56 satisfies (? = (\d{3}) + (\.\d*)? $), so this "123" satisfies, returns "123"
4th step: Starting from 4 to search, the beginning of the 4 meet \d{1,3} maximum match, the following 56789.56 is not satisfied (? = (\d{3}) + (\.\d*)? $), so this "4" is not satisfied.
5th step: Starting from 5 to search, the beginning of the 45 meet \d{1,3} maximum match, the following 6789.56 is not satisfied (? = (\d{3}) + (\.\d*)? $), so this "45" is not satisfied.
6th step: Starting from 6 to search, the start of 456 satisfies \d{1,3} maximum match, the following 789.56 satisfies (? = (\d{3}) + (\.\d*)? $), so this "456" satisfies, returns "456"
7th step: Starting from 7 to search, the beginning of the 7 meet \d{1,3} maximum match, the following 89.56 is not satisfied (? = (\d{3}) + (\.\d*)? $), so this "7" is not satisfied.
8th step: Starting from 8 to search, the beginning of the 78 meet \d{1,3} maximum match, the following 9.56 is not satisfied (? = (\d{3}) + (\.\d*)? $), so this "78" is not satisfied.
9th step: Starting from 9 to search, the beginning of the 789 meet \d{1,3} maximum match, the following. 56 is not satisfied (? = (\d{3}) + (\.\d*), $), so this "789" is not satisfied, at this time "789" satisfies the maximum match of \d{1,3}, but there is no match at the back.
10th step: From. Start a search, start a. (. | 9. | 89.) are not satisfied \d{1,3}, so this from. Not satisfied with the location search.
11th Step: Starting from 5 to search, the beginning of the 5 meet \d{1,3} maximum match, the following 6 is not satisfied (? = (\d{3}) + (\.\d*)? $), so this "5" is not satisfied.
12th step: Starting from 6 to search, the beginning of the 56 meet \d{1,3} maximum match, there is no, not satisfied (? = (\d{3}) + (\.\d*)? $), so this "56" is not satisfied.
The direct point is that: (? =EXP) The matching content is not captured by match, but only when a condition is used to determine whether the condition is satisfied after the current location of the search.
(? <=exp)
Also called 0 width is recalling the post assertion, which asserts that the front of the position itself appears to match the expression exp. For example (<=\bre) \w+\b matches the second half of a word that begins with re (except for parts other than re), such as when looking for reading a book, which matches ading.
A bit strange, in the JS regular expression to test this has been an error, guess estimation is not supported.
(?! Exp
This is the opposite of (? =exp).
Console.log (' 123456789.56 '). Match (/\d{1,3} (?! (\d{3}) + (\.\d*)? $)/g)); // ["345 ", "678", "9", "the"]
Explain:
First of all Meet \d{1,3}
Starting at 1, the maximum match for \d{1,3} is 1, followed by 23456789.56, meet, (?! (d{3}) + (\.\d*)? $), OK, at this point \d{1,3} matches "1"
The second time starting from 2 search,, \d{1,3} The maximum match is 12, followed by 3456789.56, meet, (?! (d{3}) + (\.\d*)? $), OK, at this point \d{1,3} matches "12"
The third time starting from 3 search, \d{1,3} The maximum match is 123, followed by 456789.56, not satisfied, (?! (d{3}) + (\.\d*), so the first of the returned results array is "12", at which point the maximum of \d{1,3} matches is "12"
The fourth time starting from 4 search, followed by 56789.56, \d{1,3} The maximum match is 34, meet, (?! (d{3}) + (\.\d*)? $), OK, at this point \d{1,3} matches "34"
The fifth time starting from 5 search, followed by 6789.56, \d{1,3} The maximum match is 345, meet, (?! (d{3}) + (\.\d*)? $), OK, at this point \d{1,3} matches "345"., the maximum 3 digits have been met, this time return "345"
The sixth time starting from 6 search, followed by 789.56, \d{1,3} The maximum match is 6, not satisfied, (?! (d{3}) + (\.\d*), $), at which point \d{1,3} matches "6".
The seventh time starting from 7 search, followed by 89.56, \d{1,3} The maximum match is 67, meet, (?! (d{3}) + (\.\d*), $), at which point \d{1,3} matches "67".
The eighth time starting from 8 search, followed by 9.56, \d{1,3} The maximum match is 678, meet, (?! (d{3}) + (\.\d*)? $), at which point \d{1,3} matches "678", and the maximum of 3 digits has been met, at which point "678" is returned.
The nineth time starting from 9, followed by. \d{1,3} The maximum match is 9, meet, (?! (d{3}) + (\.\d*), $), at which point \d{1,3} matches "9"
Tenth time from. Start the search, at this time "9." does not satisfy \d{1,3}, so at this time return "9"
The 11th time starting from 5 search, followed by 6, \d{1,3} The maximum match is 6, meet, (?! (d{3}) + (\.\d*), $), at which point the maximum match for \d{1,3} is "5"
The 12th time starting from 6 search, after No, \d{1,3} The maximum match is 56, meet, (?! (d{3}) + (\.\d*) ($), at this point \d{1,3} maximum match is "56", end, return the last "56"
This is only a personal understanding, there is something wrong, hope that the great God to correct me.
JavaScript regular Expressions (? =exp), (? <=exp), (?! Exp