This commit is contained in:
Ilya Kantor 2019-07-25 17:23:58 +03:00
parent 876674fc37
commit a0853ed30a
2 changed files with 6 additions and 9 deletions

View file

@ -1,9 +1,9 @@
A number is `pattern:\d+`.
The regexp for an integer number is `pattern:\d+`.
We can exclude negatives by prepending it with the negative lookahead: `pattern:(?<!-)\d+`.
If we try it now, we may notice one more "extra" result:
Although, if we try it now, we may notice one more "extra" result:
```js run
let reg = /(?<!-)\d+/g;
@ -13,11 +13,11 @@ let str = "0 12 -5 123 -18";
console.log( str.match(reg) ); // 0, 12, 123, *!*8*/!*
```
It matches `match:8` of `subject:-18`. To exclude it, we need to ensure that the regexp starts matching a number not from the middle of another number.
As you can see, it matches `match:8`, from `subject:-18`. To exclude it, we need to ensure that the regexp starts matching a number not from the middle of another (non-matching) number.
We can do it by specifying another negative lookbehind: `pattern:(?<!-)(?<!\d)\d+`. Now `pattern:(?<!\d)` ensures that a match does not start after another digit.
We can do it by specifying another negative lookbehind: `pattern:(?<!-)(?<!\d)\d+`. Now `pattern:(?<!\d)` ensures that a match does not start after another digit, just what we need.
Or we can use a single lookbehind here:
We can also join them into a single lookbehind here:
```js run
let reg = /(?<![-\d])\d+/g;