Javascript 将每个事件与正则表达式匹配,并以字符串形式获取它们的索引
在交互式表单的构建过程中,我需要解析用户提交的一些正则表达式,在每个正则表达式中查找每个匹配捕获,并获取它们的索引(捕获组开始的地方)以修改原始字符串(例如,在捕获周围添加一些Javascript 将每个事件与正则表达式匹配,并以字符串形式获取它们的索引,javascript,regex,Javascript,Regex,在交互式表单的构建过程中,我需要解析用户提交的一些正则表达式,在每个正则表达式中查找每个匹配捕获,并获取它们的索引(捕获组开始的地方)以修改原始字符串(例如,在捕获周围添加一些标记) 最后,我希望能够修改ip:(.+);端口:(\d+)进入ip:(.+);端口:(\d+)例如 目前我有一段代码: // Called somewhere after user entered every regex he wants $('input.regex').each(function () { p
标记)最后,我希望能够修改
ip:(.+);端口:(\d+)
进入ip:(.+);端口:(\d+)
例如
目前我有一段代码:
// 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:(.+);端口:(\d+)
和(.+)
(\d+)
- 在
,输出ip:(?P[\d\.]);端口:(\d{2,5})
和(?P[\d\.])
(\d{2,5})
当前输出id1:(\d+);id2:(\d+)
和(\d+)
。很容易得到第一个索引,但第二个索引(\d+)
[{'match':'(\d+),'index':4},{'match':'(\d+),'index':14}]
?我可以通过一些字符串操作来实现这一点,但我想知道是否有更简单(更干净)的方法 对此,我将使用rexep.exec()。它对RexExp进行操作,并将其与字符串进行匹配,但最重要的是,它返回每个匹配的数组,可以像这样进行迭代
var match; //Match object.
var matches = []; //Matches return, Array filled with match records.
var regex = "..."; //Current Regex.
var string = "..."; //Current String.
while((match = regex.exec(string)) !== null){
var matchRecord = {};
matchRecord.match = regex;
matchRecord.index = match.index; //Might want to increment by 1 to make Human Readable?
matches.push(matchRecord);
}
注意:有关regexp.exec的更多信息,请参见:我还想保留捕获列表,而不仅仅是在其周围添加一些标记。我不认为
string.replace
适用于此:/@maximelrant看看这就是我目前使用的。。。我试图访问索引
属性,但每次它都给了我未定义的
。通过使用调试器查看,我得到了一个数组,其中包含匹配项和属性长度。非常不错,谢谢。当我试图使用exec()
时,我总是得到一个无限循环,因为我忽略了==代码>测试,我猜。谢谢