如何使用JavaScript替换字符串中除第一个和最后一个字符以外的所有字符

时间:2018-12-12 16:45:21

标签: javascript regex

我需要用JavaScript编写解决方案,以将字符串中的所有字符替换为*,除了第一个和最后一个字符。我对RegEx不太熟悉,但尝试使用以下方法来实现解决方案:

var regex = /\.(?=^)(?!=$)/;
    const censored = w.replace(regex)
    console.log(censored)

关于如何实现这一目标的任何想法?

6 个答案:

答案 0 :(得分:4)

使用先行方式的想法是可行的,让我们纠正一些错误:

var regex = /(?<!^).(?!$)/g;
var w = 'fork'
var censored = w.replace(regex, '*')

console.log(censored)

但是请注意,后向(?<=?<!)来自ES 2018,尚未得到普遍支持。 (正如另一个答案中指出的那样,您实际上不需要在此后面进行回顾,也可以进行(?!^)的回顾)。 Stil ...

您也可以切掉第一个字符并替换其余字符:

var w = 'fork'
var censored = w[0] + w.slice(1).replace(/.(?!$)/g, '*')

console.log(censored)

最后,这是一种完全不需要任何正则表达式的方法:

var w = 'fork'
var censored = w[0] + '*'.repeat(w.length - 1) + w.slice(-1)

console.log(censored)

答案 1 :(得分:1)

这是一种不使用正则表达式的方法:

function censor(str) {
  return str[0] + new Array(str.length - 2).join('*') + str[str.length - 1]
}

console.log(censor('happy birthday'))

答案 2 :(得分:0)

您可以使用replace回调作为第二个参数来替换如下项:

const str = 'fork'

var result = str.replace(/^(.)(.+)(.)$/, (whole, first, middle, last) => {
  return first + new Array(middle.length).fill('*').join('') + last
})

console.log(result)

答案 3 :(得分:0)

使用符合ECMAScript 5的正则表达式模式非常容易:

var regex = /(?!^)[\s\S](?!$)/g;
var w = "Text!"
var censored = w.replace(regex, "*")
console.log(censored)

详细信息

  • (?!^)-前瞻否定:匹配的位置不是字符串的起始位置
  • [\s\S]-任何字符(甚至是换行符)
  • (?!$)-超前查询:匹配的位置不是字符串结束位置

请参见regex demo

答案 4 :(得分:0)

如果不是正则表达式,这是一个解决方案。

function censor(input){
  return input.split("").map(function(char, index){
    if(index === 0 || index === (input.length - 1)){
      return char;
    } else {
      return "*";
    }
  }).join("");
}

console.log(censor("Hello world"));

答案 5 :(得分:0)

您也可以使用以下代码:

(?<=\w{1})\w(?=\w{1})

其中 ?<= 是正向后视,而 ?= 是正向前瞻