在构建交互式表单时,我需要解析用户提交的一些正则表达式,找到每个正则表达式中的每个匹配捕获并获取它们的索引(捕获组开始的位置)以修改原始字符串(假设在<strong>
周围添加一些标签例如捕获)。
最后我希望能够修改ip:(.+);port:(\d+)
为ip:<strong>(.+)</strong>;port:<strong>(\d+)</strong>
例如。
目前我有这段小代码:
// Called somewhere after user entered every regex he wants
$('input.regex').each(function () {
pattern = $(this).val(); // for non jQuery guys: just returns the content of the input
captures = pattern.match(/(\([^\(\)]+\))/g);
for(idx in captures) {
console.log(captures[idx]);
}
});
这将返回我找到的每个捕获组(承认用户不能键入子组......是的,正则表达式已经让人有点头疼了:-))当我在一些示例上运行它时,我得到了我目前想要的东西:
- 上
ip:(.+);port:(\d+)
,输出(.+)
和(\d+)
- 上
ip:(?P<sourceip>[\d\.]);port:(\d{2,5})
,输出(?P<sourceip>[\d\.])
和(\d{2,5})
现在我想要的是获取每次捕获开始的索引。我知道有 indexOf,但我可以多次捕获相同的捕获。例如:
id1:(\d+);id2:(\d+)
当前输出(\d+)
和(\d+)
。很容易获得第一个索引,但第二个...
有没有可能得到一个类似这样的结构:[{'match': '(\d+)', 'index': 4}, {'match': '(\d+)', 'index': 14}]
?我可以通过一些字符串操作来做到这一点,但我想知道是否有更简单(和更清洁)的方式。