javascript - 如何捕获倒数第二场比赛?
问题描述
我正在尝试使用RegExp
withString.replace
替换以空格分隔的字符串中倒数第二次出现的单词。
我不明白为什么我的代码不起作用。我在正确的匹配周围有括号,那么为什么它会替换整个匹配RegExp
而不是捕获组内的匹配?
const re = /(\w+) \w+$/;
const string = 'john deer senior third';
const result = string.replace(re, match => `[${match}]`);
console.log(result); // john deer [senior third]
期望的结果:
john deer [senior] third
解决方案
请参阅MDN中的替换函数签名String.prototype.replace
。第一个参数是完全匹配,然后是捕获组。
此外,replace
将替换完整匹配,不仅是第一个捕获组(正则表达式中还可以有多个捕获组)。为了缓解这种情况,您可以使用前瞻,或将后半部分连接回:
let a = 'john deer senior third'.replace(/\w+(?= \w+$)/, m => `[${m}]`);
let b = 'john deer senior third'.replace(/(\w+)( \w+)$/, (_, a, b) => `[${a}]${b}`);
console.log(a);
console.log(b);
可能还有更优雅的方法可以做到这一点。
推荐阅读
- amazon-web-services - CloudFormation 响应对象超时
- docusignapi - 使用 SAML / AD 的 DocuSign SSO 身份验证
- amazon-web-services - 将非 ascii 内容写入 S3 的问题
- python - 使用 Adwords API 将自定义受众添加到广告组
- python - Pandas:带有数量和误差的简单时间序列
- selenium - 如何为所有窗口允许 profile.default_content_setting_values.media_stream_camera
- caching - 导致内存泄漏的插件
- java - 如何在方法中传递枚举参数
- ios - 将焦点从一个视图控制器转移到另一个视图控制器(以模态方式呈现),反之亦然
- javascript - 以编程方式更改输入类型文件的值?