我找不到让 JavaScript 正则表达式在字符串中间开始匹配的方法,和将其绑定(bind)到“^”(将正则表达式的开头锚定到我指定的起点)。
Perl 和 Python 有我需要的东西(尽管它们是彼此完全不同的方法)。
在 Perl 中我可以做:
$s = 'foo bar baz';
$r = qr/\Gbar/;
pos($s) = 4;
print 'OK' if $s =~ $r;
在 Python 中我可以做到:
s = 'foo bar baz'
r = r'bar' # r'^bar' also works
if re.match(r, s[4:]): # re.match implies '^'
print 'OK'
在 JavaScript 中(至少在 Node.js 中)我尝试:
s = 'foo bar baz';
r = /^bar/g;
r.lastIndex = 4;
if (r.exec(s))
console.log('OK');
这是行不通的。如果我将第二行更改为:
r = /bar/g;
然后它确实匹配,但它也可以在 4 之后的任何位置匹配(我不想要)。
背景:我正在研究名为 Pegex 的多语言解析框架的 JavaScript 端口,其中每个终端都是一个在当前解析位置(并锚定到它的前面)尝试的正则表达式。效率是一个问题。例如,在我的起点使用输入的子字符串副本将是最糟糕的解决方案。
我能想到的一种解决方案是将匹配的'index'值与我设置的lastIndex值进行比较,看它是否在开头匹配。这会降低 '^' 的效率,但可能不会花费太多,因为 Pegex 正则表达式通常很小并且没有 bracktracking。
谁能想到更好的解决方案?
最佳答案
匹配 "^.{4}actualre"怎么样?
关于javascript - 如何在 JavaScript 中的字符串中间进行锚定正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11818896/