javascript - JS regex 正面看后面 * 什么时候不贪心呢?
问题描述
如果我查看文档,它说*
应该总是贪婪,但在这种情况下它不是:
// returns 'password*****' instead of 'password: *****'
'password: "something"'.replace(/(?<=password[ :]*)[^\n,]+/i, '*****')
解决方案
来自 TC39 文档
lookbehind proposal
模式通常从最左边的子模式开始匹配,如果左边的子模式成功,则移动到右边的子模式。当包含在后向断言中时,匹配的顺序将被颠倒。模式将从最右边的子模式开始匹配,然后向左前进。例如,给定/(?<=\$\d+\.)\d+/
,模式将首先找到一个数字并首先确保它前面是 。往回走,然后是 \d+ 从 . 开始,最后是 $ 从断言中的 \d+ 开始的地方开始。回溯方向也将因此而反转。
由于您[^\n,]+
将匹配所有字符new line and ,
,因此它也会捕获:
并且您的后视将看不到它,因为它已经被后视后的断言捕获,
你可以做的是使用+
这将确保你至少匹配one space or :
'password: "something"'.replace(/(?<=password[ :]+)[^\n,]+/i, '*****')
推荐阅读
- excel - 循环遍历 excel 文件中的工作表并另存为 csv 文件的问题
- python - Gunicorn:坚持引导新员工
- weka - WEKA 加权平均问号
- swift - 为什么@available(iOS,不可用...)不起作用?
- matlab - 如何将单元素安全数组传递给 MATLAB 中的 COM 函数
- php - Codeigniter 会话的奇怪行为
- h5py - 有没有办法将每个 HDF5 数据集保存为 .csv 列?
- flutter - 为什么当我点击它时状态不会变为“已点击”(颤动 - 飞镖)?
- svg - 使用 SVG + CairoSVG 生成位图时的边缘值问题
- ios - 许多 firebase 实时更新的内存影响