我有一个包含颜色转义序列的字符串,如下所示:
"white text \x1b[33m yellow text \x1b[32m green text"
现在我需要替换某个转义序列的所有示例。我只得到了我要寻找的转义序列,这就是我所拥有的。据我所知,在JavaScript中替换所有示例的唯一方法是使用正则表达式。
// replace all occurences of one sequence string with another
function replace(str, sequence, replacement) {
// get the number of the reset colour sequence
code = sequence.replace(/\u001b\[(\d+)m/g, '$1');
// make it a regexp and replace all occurences with the start colour code
return str.replace(new RegExp('\\u001b\\[' + code + 'm', 'g'), replacement);
}
所以,我得到了我想要搜索的转义序列,然后我用一个正则表达式,从那个序列中得到一个数字,然后构造另一个正则表达式,来搜索转义序列,难道没有更简单,更好的方法吗?
2条答案
按热度按时间wd2eg0qa1#
如果您的问题是我所认为的那样,我认为更简单、更好的方法是直接转义您的模式并将其传递给RegExp构造函数,就像我的这个老问题中所看到的那样
How do I do global string replace without needing to escape everything?
z31licg02#
OP中的原始解决方案非常有效,在我看来只有两个问题。
"code = ..."
语句需要var
- As-is,它正在污染全局命名空间。"code = ..."
语句需要一些错误检查来处理错误的sequence
输入。下面是我的改进方法: