javascript - 如何在 JavaScript 中的字符串中间进行锚定正则表达式匹配

标签 javascript python regex perl parsing

我找不到让 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/

相关文章:

python正则表达式特定字符,任意组合

Python 比较列表中的部分字符串

javascript - RegEx - 获取 URL 中最后一个斜杠后的所有字符

javascript - React Function 组件与状态和(箭头)函数相结合

javascript - getorgchart - 我想动态分配颜色

javascript - 设置类名快捷方式

python - 为 Pandas 数据框中的时间戳数据设置时区

python - 您将如何使用 python 将 exec_command 的输出存储在 paramiko 中

javascript - 在选择中替代 onblur/onchange

python - 如何扩展 Django Form 类?