Jor*_*vis 8 javascript regex capture-group
我试图找出如何comma-separated
在以下url字符串中的值上重复捕获组:
id=1,2;name=user1,user2,user3;city=Oakland,San Francisco,Seattle;zip=94553,94523;
我正在使用这RegExp
是我想要的返回结果,除了值,因为它们是动态的,即.可能是url参数中的2,3,4等用户,并且想知道我是否可以为每个值而不是一个捕获组创建user1,user2,user3
捕获组.
正则表达式: (^|;|:)(\w+)=([^;]+)*
这是使用RegExp在线的现场演示
示例输出:
等...基于我之前解释过的动态值.
问题:我的表达式错误我正在使用*
循环来重复模式?
Pet*_*r G 12
正则表达式不支持您尝试做的事情.当引擎第二次进入捕获组时,它会覆盖第一次捕获的内容.考虑一个简单的例子(感谢regular-expressions.info):/(abc|123)+/
用于'abc123'
.它将匹配"abc"然后看到加号并重试,匹配"123".输出中的最终捕获组将为"123".
无论您尝试何种模式,这种情况都会发生,您设置的任何限制只会在正则表达式接受字符串时发生变化.考虑/(abc|123){2}/
.这接受'abc123',捕获组为"123"但不是'abc123abc'.将捕获组放入另一组也不起作用.创建捕获组时,就像创建变量一样.它只能有一个值,后续值会覆盖前一个值.你永远不会有比拥有括号对更多的捕获组(尽管如此,你肯定会有更少的捕获组).
一个可能的解决方法是将字符串拆分为';',然后将每个字符串分别放在'='上,然后分别放在'''上的字符串右侧.那会得到你[['id', '1', '2'], ['name', 'user1', ...], ['city', ...], ['zip', ...]]
.
那就是:
function (str) {
var afterSplit = str.split(';|:');
afterSplit.pop() // final semicolon creates empty string
for (var i = 0; i < afterSplit.length; i++) {
afterSplit[i] = afterSplit[i].split('=');
afterSplit[i][1] = afterSplit[i][1].split(','); // optionally, you can flatten the array from here to get something nicer
}
return afterSplit;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5797 次 |
最近记录: |