如何将正则表达式与字符串中间的起始索引匹配?

时间:2016-12-31 22:29:07

标签: javascript regex

我正在编写一个解析器,我想避免出于性能原因而切断输入字符串。因此,我创建了一个Stream对象,用光标表示字符串:

const Stream = (string, cursor) => Object.freeze({
  string,
  cursor,
  length: string.length - cursor,
  slice: (start, end) => string.slice(start + cursor, end ? start + end : undefined),
  move: distance => stream(string, cursor + distance),
})

我希望能够使用正则表达式来匹配此字符串。但是,我不关心光标前的任何事情。假设我有以下字符串和光标:

> string = 'hello ABCD'
'ABCD'
> cursor = 6
6

所以我们不关心A之前的任何事情,但我们希望能够使用正则表达式来匹配所有这些大写字母:

> re = /^[A-Z]+/
/^[A-Z]+/

我不确定如何让它发挥作用。我注意到当您使用g标记时,您可以使用RegExp.exec并跟踪lastIndex属性。但是,^匹配不会从lastIndex ...

开始

我有什么想法可以让它有效地运作?如果我必须使用第三方正则表达式库,我很好,但理想情况下可以使用本机RegExp ...

1 个答案:

答案 0 :(得分:-2)

我会选择sed:

sed -rn 's/^.{'$cursor'}([A-Z]+)$/\1/p'

其中$ cursor是一个shell变量,包含开头忽略的字符数。

选项-r是扩展正则表达式,-n不会一直打印,如果匹配则会打印p

现在问题是如何将它移植到您的语言。 Here你有一些关于如何在Javascript中使用正则表达式中的变量的提示。