第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

正則表達(dá)式替換括號(hào)中的文本

正則表達(dá)式替換括號(hào)中的文本

牧羊人nacy 2023-03-18 16:08:42
$Contact運(yùn)行時(shí)是 NodeJS,我正在嘗試用名稱(chēng)替換文本。但我還需要能夠捕獲圍繞在大括號(hào)中的術(shù)語(yǔ)的單詞{}:Where Name = John:  My name is $Contact => My name is John  Hello {I am $Contact} => Hello I am JohnWhere Name = null:  My name is $Contact => My name is   Hello {I am $Contact} => Hello這個(gè)想法是用字符串替換$Contact限定符,并且可選地,括號(hào)中的文本僅在字符串不為空時(shí)才會(huì)顯示。大括號(hào)的使用是可選的。// m = Message template (Hello {I am $Contact})// qualifier = $Contact// value = value to replace withconst replaceQualifier = (m, qualifier, value) =>    m.replace(new RegExp('\\{?(.*?)\\' + qualifier + '(.*?)\\}?', 'g'), value ? `$1${value}$2` : '');它似乎適用于沒(méi)有大括號(hào)但不適用于大括號(hào)的限定符。
查看完整描述

2 回答

?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊

你需要使用

m.replace(new?RegExp('(?:\\{([^{}]*))?\\'?+?qualifier?+?'(?:([^{}]*)})?',?'g'),?
???value???`$1${value}$2`?:?'');

正則表達(dá)式看起來(lái)像

(?:\{([^{}]*))?\$Contact(?:([^{}]*)})?
  • (?:\{([^{}]*))?- 可選出現(xiàn)and then(第 1 組)除and{以外的任何 0 個(gè)或多個(gè)字符{}

  • \$Contact?-?$Contact

  • (?:([^{}]*)})?- 可選出現(xiàn)(第 2 組)除{and}和 then之外的任何 0 個(gè)或多個(gè)字符}。

參見(jiàn) JS 演示:

const replaceQualifier = (m, qualifier, value) =>

? ? m.replace(new RegExp('(?:\\{([^{}]*))?\\' + qualifier + '(?:([^{}]*)})?', 'g'), value ? `$1${value}$2` : '');


const qualifier = '$Contact';

let m = 'Hello {I am $Contact}';

let value = 'John';

console.log(replaceQualifier(m, qualifier, value));

value = '';

console.log(replaceQualifier(m, qualifier, value));


m = 'My name is $Contact';

value = 'John';

console.log(replaceQualifier(m, qualifier, value));

value = '';

console.log(replaceQualifier(m, qualifier, value));


查看完整回答
反對(duì) 回復(fù) 2023-03-18
?
慕哥6287543

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超10個(gè)贊

試試這個(gè)解決方案


var str1 = "My name is $Contact"

var str2 = "My name is {$Contact}"

var str3 = "Hello {I am $Contact}"


const replaceQualifier = (m, qualifier, value) =>

    m.replace(new RegExp(`(?:\\{(.*?))?\\${qualifier}(?:(.*?)\\})?`), value ? `$1${value}$2` : '');


console.log(replaceQualifier(str1,"$Contact","John"))

console.log(replaceQualifier(str2,"$Contact","John"))

console.log(replaceQualifier(str3,"$Contact","John"))

console.log(replaceQualifier(str1,"$Contact"))

console.log(replaceQualifier(str2,"$Contact"))

console.log(replaceQualifier(str3,"$Contact"))


輸出:


My name is John

My name is John

Hello I am John

My name is 

My name is 

Hello 

該解決方案與您的解決方案非常相似,只是組的使用方式不同:

  • (?...)...非捕獲(“普通”)括號(hào)

  • \\{(.*?)...{之后是捕獲的組(.*?)

  • (?:\\{(.*?))?...出現(xiàn)零次或多次

  • 右邊部分同樣

編輯(為什么原來(lái)的正則表達(dá)式不起作用)

調(diào)試時(shí)replace,首先查看match編輯的內(nèi)容,以便在沒(méi)有g標(biāo)志的情況下進(jìn)行調(diào)試。在這種情況下,\{?(.*?)=可選 {字符,然后(分組)零個(gè)或多個(gè)任意字符,然后是qualifier,即組之前是整個(gè)字符串qualifier(因?yàn)槭?code>{可選

在建議的解決方案中,整個(gè)塊 \{(.*?)都是可選的,即匹配{...字符串的一部分(如果存在),但不匹配其他任何內(nèi)容。


查看完整回答
反對(duì) 回復(fù) 2023-03-18
  • 2 回答
  • 0 關(guān)注
  • 452 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)