Как заменить все символы в строке, кроме первого и последнего символов, используя JavaScript - PullRequest
0 голосов
/ 12 декабря 2018

Мне нужно написать решение на JavaScript, чтобы заменить все символы в строке на *, кроме первого и последнего символов.Я не очень хорошо знаком с RegEx, но пытался использовать следующее для достижения решения:

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

Есть идеи, как мне этого добиться?

Ответы [ 5 ]

0 голосов
/ 12 декабря 2018

Вот решение, если регулярное выражение не является обязательным.

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"));
0 голосов
/ 12 декабря 2018

Это очень просто с шаблоном регулярных выражений, совместимым с ECMAScript 5:

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

Подробности

  • (?!^) - отрицательный прогноз: соответствует местоположению, которое не является начальной позицией строки
  • [\s\S] - любой символ (даже новая строка)
  • (?!$) - отрицательный прогноз: соответствует местоположению, которое не является конечной позицией строки

См. regex demo .

0 голосов
/ 12 декабря 2018

Вы можете использовать обратный вызов замены в качестве второго параметра для замены таких элементов:

const str = 'fork'

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

console.log(result)
0 голосов
/ 12 декабря 2018

Вот способ без регулярных выражений:

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

console.log(censor('happy birthday'))
0 голосов
/ 12 декабря 2018

Идея использования lookaheads жизнеспособна, давайте исправим несколько ошибок:

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

console.log(censored)

Обратите внимание, однако, что lookbehinds (?<= и ?<!) взяты из ES 2018 и пока не поддерживаются повсеместно.(Как указывалось в другом ответе, вам здесь на самом деле не нужен взгляд сзади, подойдет и прогноз (?!^)).Стиль ...

Вы также можете отрубить первый символ и заменить остальных:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...