JavaScript 正则表达式组定位
JavaScript regex group targeting
我需要捕获一些标准字符串中的单词(实际上是链接ID(,但不是捕获所有字符串。
这
(?:color_form_submit_)('w+)
用红宝石工作,在color_form_submit_yellow
中捕捉yellow
但是在JS中它似乎捕获了所有字符串,我不知道为什么。
我想实现一个正则表达式只是为了优雅
如果你想要优雅,那么你可以尝试这样的东西
var str = 'color_form_submit_yellow',
reg = /color_form_submit_('w+)/;
(str.match(reg) || [])[1]; // "yellow"
你也有
('fail'.match(reg) || [])[1]; // undefined
这是有效的,因为
[1, 2, 3] || []; // [1, 2, 3]
null || []; // []
array[1] === (array)[1];
不幸的是,JS不支持回溯和失败match
返回null,而不是空数组。因此,在没有if
条件的情况下,在一个表达式中做到这一点的唯一方法是类似
color = (str.match(/color_form_submit_('w+)/) || []).pop()
例:
> ("color_form_submit_black".match(/color_form_submit_('w+)/) || []).pop()
"black"
> ("foo bar".match(/color_form_submit_('w+)/) || []).pop()
undefined
与 if
语句相比,此构造的优点是它可以在表达式上下文中使用,例如,在函数调用中:
myRegex = /color_form_submit_('w+)/
showColor((myLabel.match(myRegex) || []).pop())
您需要显式查找与第一个捕获组的匹配项:
var myregexp = /color_form_submit_('w+)/;
var match = myregexp.exec(subject);
if (match != null) {
result = match[1];
}
var match = string.match(/color_form_submit_('w+)/);
match && match[1];
将是你在 JavaScript 中可以获得的最短(不必要的混淆(方式。
相关文章:
- java.net和javascript之间正则表达式的差异
- Grunt匹配正则表达式
- 不同浏览器中的空白字符正则表达式行为
- 正则表达式在字符串中找到base64
- 子字符串/正则表达式以获取字符串中保存的 SRC 值
- 调用正则表达式匹配的函数
- 使用正则表达式评估电子邮件地址时出现性能问题
- Javascript 正则表达式 : ^[^/s/]+[a-z]{1,}[0-9]*[-_]*[^/][
- JavaScript正则表达式文本与RegExp对象
- 正则表达式只允许 x 个整数
- 使用正则表达式将输入格式设置为单字符逗号、单字符逗号等
- 改进用于验证付款金额的正则表达式
- 正则表达式与数字中的第二个点匹配
- 键按正则表达式以查找具有负值的小数
- 一个正则表达式,用于从JS中的HTML标记中删除id、样式和类属性
- 将po-box javascript正则表达式转换为c#regex
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 使用正则表达式捕获“”并分割成阵列
- JavaScript 正则表达式组定位
- 使用正则表达式定位 HTML 标记中的属性