如何使用JavaScript替换字符串中除首字符和尾字符以外的所有字符

ar7v8xwq  于 2023-01-08  发布在  Java
关注(0)|答案(6)|浏览(272)

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

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

你知道我该怎么做吗?

bksxznpy

bksxznpy1#

使用lookaheads的想法是可行的,让我们纠正几个错误:

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

console.log(censored)

但是,请注意,lookbehind(?<=?<!)来自ES 2018,尚未得到普遍支持。(正如另一个答案所指出的,您实际上不需要lookbehind,lookahead (?!^)也可以)。
你也可以把第一个字符切掉,然后替换掉剩下的字符:

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 - 2) + w.slice(-1)

console.log(censored)
r8xiu3jd

r8xiu3jd2#

下面是一个不使用正则表达式的方法:

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

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

vshtjzan3#

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

var regex = /(?!^)[\s\S](?!$)/g;
var w = "Text!"
var censored = w.replace(regex, "*")
console.log(censored)
    • 详细信息**
  • (?!^)-负前瞻:匹配不是字符串开始位置的位置
  • [\s\S]-任何字符(甚至是换行符)
  • (?!$)-负前瞻:匹配不是字符串结束位置的位置

请参见regex demo

0pizxfdo

0pizxfdo4#

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

const str = 'fork'

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

console.log(result)
x9ybnkn6

x9ybnkn65#

如果不需要正则表达式,这里有一个解决方案。

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"));
zc0qhyus

zc0qhyus6#

您也可以使用以下代码:

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

其中?<=是正后视,?=是正前视

相关问题