亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用正則表達式為文本添加樣式

使用正則表達式為文本添加樣式

森欄 2023-06-09 11:00:56
有一個文本輸入,如果文本位于兩個感嘆號之間,則需要以粗體顯示文本。例如:a!a!bb!c!c將是 a a bb c c。文本位于 ! 將被加粗。這是代碼:const arr = "this! i!s the i!npu!t"; if (arr.includes('!')) {   result = arr.replace(/\!(\w+)\!/g, '<b>$1</b>'); }如果有一個連續的字符串,它似乎工作正常,但如果它們之間有空格的單詞,它就不能正常工作。有辦法解決嗎?
查看完整描述

4 回答

?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

  1. 首先,你不需要逃跑!

  2. 其次,您替換\w+[^!]+because \w+is egal [a-zA-Z0-9_]+。

所以,你可以試試下面的正則表達式。

!([^!]+)!

您的實現deleteSkid()很好,但是您將值傳遞給 asInputNumber所以defaultValue當組件重新渲染時它不會改變。只需將其替換為value,它就可以工作。


<InputNumber

  min={0}

  value={skid[key]}

  rules={[

    {

      required: true,

      message: "Please input quantity!"

    }

  ]}

  onChange={(newQuantity) => {

    updateProductQuantity(skid, key, newQuantity, index);

  }}

/>const arr = "this! i!s the i!npu!t";


if (arr.includes('!')) {

  result = arr.replace(/!([^!]+)!/g, '<b>$1</b>');

}


console.log(result);


查看完整回答
反對 回復 2023-06-09
?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

問題是\w不匹配空格,它匹配字母、數字和下劃線。用于[\w\s]匹配字母、數字、下劃線或空格:


const arr = "this! i!s the i!npu!t";

const result = arr.replace(/!([\w\s]+)!/g, '<b>$1</b>');

console.log(result);


您可以安全地刪除arr.includes('!')檢查,因為.replace如果沒有替換發生,命令將返回未更改的字符串。問題是\w不匹配空格,它匹配字母、數字和下劃線。用于[\w\s]匹配字母、數字、下劃線或空格:


const arr = "this! i!s the i!npu!t";

const result = arr.replace(/!([\w\s]+)!/g, '<b>$1</b>');

console.log(result);


您可以安全地刪除arr.includes('!')檢查,因為.replace如果沒有替換發生,命令將返回未更改的字符串。


查看完整回答
反對 回復 2023-06-09
?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

它不起作用,因為您使用的是\w, 當您真的想匹配除!. 這樣做的方法是使用[^!].


即, 后跟所有不想[^匹配的字符,再跟.]


更正后的代碼:


const arr = "this! i!s the i!npu!t";


if (arr.includes('!')) {

  result = arr.replace(/\!(\w+)\!/g, '<b>$1</b>');

}


查看完整回答
反對 回復 2023-06-09
?
UYOU

TA貢獻1878條經驗 獲得超4個贊

如果這不匹配! !使空格變為粗體<b> </b>,并且要<b>在第一個單詞字符之前開始,! <b>i</b>!您也可以使用 3 個捕獲組。

如果感嘆號應該配對,您可以使用正向先行來斷言可選對。

(!\s*)(\w+(?:\s+\w+)*)(\s*!)(?=(?:[^!]*![^!]*!)*[^!]*$)

解釋

  • (!\s*)奪取第一組,比賽!和可選的空白字符

  • (\w+(?:\s*\w+)*)捕獲第 2 組,匹配 1+ 個單詞字符并可選擇重復匹配 1+ 個空白字符和 1+ 個單詞字符

  • (\s*!)捕獲第 3 組,匹配可選的空白字符和 !

  • (?=(?:[^!]*![^!]*!)*[^!]*$)正面前瞻,斷言可選對!直到字符串的末尾

正則表達式演示

如果匹配項應在同一行,則可以使用 , 排除否定字符類中的匹配換行符[^!\r\n],并用于[^\S\r\n]匹配沒有換行符的空格而不是\s

正則表達式演示


const regex = /(!\s*)(\w+(?:\s+\w+)*)(\s*!)(?=(?:[^!]*![^!]*!)*[^!]*$)/g;

[

  "this! i!s the i!npu!t",

  "! !",

  "a!a!bb!c!c",

  "a!b!c",

  "xyz",

].forEach(s => console.log(s.replace(regex, "$1<b>$2</b>$3")));


查看完整回答
反對 回復 2023-06-09
  • 4 回答
  • 0 關注
  • 246 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號