簡體   English   中英

如何使用 JavaScript 替換字符串中除第一個和最后一個字符之外的所有字符

[英]How to replace all characters in a string except first and last characters, using JavaScript

我需要在 JavaScript 中編寫一個解決方案,將字符串中的所有字符替換為 *,第一個和最后一個字符除外。 我對 RegEx 不是很熟悉,但試圖使用以下方法來實現解決方案:

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

關於如何實現這一目標的任何想法?

使用前瞻的想法是可行的,讓我們糾正一些錯誤:

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

這是一種沒有正則表達式的方法:

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

您可以使用替換回調作為第二個參數來替換這樣的項目:

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

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

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

細節

  • (?!^) - 否定先行:匹配不是字符串起始位置的位置
  • [\s\S] - 任何字符(甚至是換行符)
  • (?!$) - 否定先行:匹配不是字符串結束位置的位置

請參閱正則表達式演示

如果不需要正則表達式,這是一個解決方案。

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

您還可以使用以下代碼:

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

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

def special_replace(s):
x=''
for i in range(2,len(s)):
    x=x+'*'
return s[0]+x+s[-1]

x=special_replace('Hello World')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM