将每个事件与正则表达式匹配,并在字符串中获取它们的索引
Match every occurences with regex and get their indexes in string
在构建交互式表单时,我需要解析用户提交的一些正则表达式,找到每个正则表达式中的每个匹配捕获并获取它们的索引(捕获组开始的位置(以修改原始字符串(例如,假设在捕获周围添加一些<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}]
?我可以通过一些字符串操作来做到这一点,但我想知道是否有更简单(和更干净(的方法。
我会为此使用RexExp.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 的更多信息,请访问:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp/exec
相关文章:
- 通过字符串获取JSON对象
- 将敲除绑定应用于模板,并将结果作为字符串获取
- 使用字符串获取本地对象的属性
- 如何使用 jQuery 在标签的 for 属性中使用子字符串获取标签元素的值
- 使用 Javascript 将 Java 渲染为字符串获取最终 HTML
- 如何使用正则表达式从此字符串获取电子邮件
- 维基媒体API从JSON字符串获取相关数据
- 如何使用jQuery将HTML数据值作为字符串获取
- 带有换行符的JSP+HTML-将其作为字符串获取,并删除"新线”;
- 如何从字符串获取url-jQuery或Javascript
- QML-将JS函数的代码作为字符串获取
- cookie字符串获取并设置jquery控件的属性
- 通过字符串获取HTML元素
- 从绝对url字符串获取锚值
- 在myObj.one.two.three.field中,当字段有2个或更多嵌套级别时,通过路径字符串获取对象字段
- 从带有moment的非本地ISO8601字符串获取时间(小时,分钟)
- 使用javascript使用parseFloat和parseInt无法正常工作的字符串获取价格
- 如何从json字符串获取键值
- 使用javascript从给定字符串获取电子邮件id
- 从Json字符串获取数据到javascript (jQuery)