跳到主要内容
CNode

正则表达式能实现Template strings的功能吗?

问答
Jjiangliqin发布于 10 年前最后回复 10 年前
443370
  1. 我先描述下我的问题: 我格式化当前标准格式日期:2016-03-26 ,我写了一个匹配时间的正则表达式,/\d{4}-\d{2}-[\d{2}(-\d{2})*] /,然后匹配2016-03-[26-28]这个字符串。

2.提问 我想把当前时间的D天,动态替换正则表达式中表示天的那部分\d{2},在正则中不能用类似于es6 中Template strings 的${}的部分替换,请教大侠们该怎么做,写成这种动态的正则表达式

查看回复

回复 (4)

E
elrrrrrrr#410 年前

这样吗?

'use strict';

// input ${year}-${month}-${day}
// output 2016-03-27

const year = '2016';
const month = '03';
const day = '27';

/**
 * render
 *
 * @name render
 * @function
 * @access public
 * @param {String} template 需要渲染的字符串
 * @returns {String} 渲染完成后的字符串
 */
function render(template) {
  // 匹配所有 ${}
  const RE = /\$\{(.*?)\}/g;
  const res = template.replace(RE, (c) => {
    // 获取 ${st} 中的 st
    const st = /\$\{(.+?)\}/.exec(c)[1];
    // 暴力 eval ,获取表达式的值
    return eval(st);
  });
  return res;
}

// 调用示例
const str = render('${year}-${month}-${day}');

console.log('--------------->', str);

L
luicfer#210 年前

比如 (\d{4})(\d{2})匹配成了后 $1 代表第一个4个数字 $2代表 两个数字 你要留下一 替换表达式就可以写成 $1xxxx

L
luicfer#110 年前

用()捕获,然后可以替换

参与回复

登录后即可参与回复。登录