我有许多输入对,使用JavaScript在文本中搜索。每个对包含一个短字符串(比如说
例如,如果文本是
我曾尝试过类似于
然后,我尝试使用来自
使用
是否有一种方法可以检查给定位置的子字符串是否在给定上下文中,如正则表达式指定的那样?
cc
)和它应该在其中的上下文(例如[^\d]cc[^\d]
)。我想在文本中定位匹配项,但这不是简单地使用indexOf([^\d]cc[^\d])
那样容易,因为它不把子字符串作为参考。例如,如果文本是
1cccd
,则输出应该是2
,但'1cccd'.indexOf([^\d]cc[^\d])
给出的结果是1
,因为它找到了[^\d]
(正则表达式的开头)的位置。我曾尝试过类似于
'1cccd'.replace([^\d]cc[^\d], '$&').slice(i).indexOf('cc') == 0
(其中i
在文本中前进),但这会报告所有cc
实例而不考虑上下文。然后,我尝试使用来自
match
的捕获组来检查子字符串左侧的字符数:var tmp = '1cccd'.match(([^\d])cc[^\d]); return tmp.index+tmp[1].length;
。但我无法将其直接应用于搜索区域,因为match
不使用来自正则表达式的lastIndex
。另一方面,exec
确实使用lastIndex
,但它无法使用捕获组。(编辑:exec
现在可以使用捕获组,如答案所示)使用
lookbehind
似乎是答案,但JavaScript不支持这些。是否有一种方法可以检查给定位置的子字符串是否在给定上下文中,如正则表达式指定的那样?
'1cccd'.indexOf([^\d]cc[^\d])
返回1” - 真的吗?我只得到了语法错误...正如我所预料的那样,因为据我所知indexOf只接受字符串参数。你从哪里得到它可以接受正则表达式呢?这是在特定的运行时环境中吗,还是...? - CBroe