有没有更好,更快的方法来用Javascript中的文本替换字符串中的数字?

时间:2019-06-11 16:43:17

标签: javascript

我想有效地 (一个遍历字符串,而不是更多),将字符串中的1,2,3值替换为其文本表示形式s.t。一二三。 JS中最有效的方法是什么?

示例:

输入Old value '2', new value: '1', predicted value: '3'

输出Old value 'two', new value: 'one', predicted value: 'three'

这是我想出的解决方案:

function formatActionInSysHistory(strValue) {
    let dict = {
      1: 'one',
      2: 'two',
      3: 'three'
    }
    foo = strValue.replace(/[123]/g, val => dict[val])
    console.log(foo)
}
formatActionInSysHistory("Old value '2', new value: '1', predicted value: '3'")

3 个答案:

答案 0 :(得分:1)

您可以使用regular expression。下面是一个示例。

let str = "Old value '2', new value: '1', predicted value: '3'";

const mapObj = {
   1:"one",
   2:"two",
   3:"three"
};

const replaceAll = (str, mapObj) => {
    const re = new RegExp(Object.keys(mapObj).join("|"),"gi");

    return str.replace(re, function(matched){
        return mapObj[matched.toLowerCase()];
    });
}

console.log(replaceAll(str, mapObj));

答案 1 :(得分:1)

怎么样?

var demoStr = "Old v1alue '2', new value: '1', predicted value: '3'"

function convertStr(str){
    console.time('convertStr')
     let enNum = ['zero','one','two','three']
     str = str.replace(/(\d)/g,(matched,p1)=>{
        return p1 && enNum[p1]
    })
    console.timeEnd('convertStr')
    return str

}

convertStr(demoStr)

答案 2 :(得分:0)

要回答我自己的问题,如果有任何需要的话:

function formatActionInSysHistory(strValue) {
    let dict = {
      1: 'one',
      2: 'two',
      3: 'three'
    }
    foo = strValue.replace(/[123]/g, val => dict[val])
    console.log(foo)
}
formatActionInSysHistory("Old value '2', new value: '1', predicted value: '3'")

还有更多示例,例如here