簡體   English   中英

帶有 replace() 的正則表達式僅用於字母

[英]regex with replace() for letters only

我有一個字符串 output

20153 Risk

我想要實現的是只獲取字母,我通過使用正則表達式只獲取數字來實現

const cf_regex_number = cf_input.replace(/\D/g, '');

這將只返回20153 但是,一旦我嘗試只獲取字母,它就會返回 while 字符串而不是Risk 我已經完成了我的研究,並且只獲取字母的正則表達式正在使用**/^[a-zA-Z]*$/**

這是我試圖只得到字母的代碼行

const cf_regex_character = cf_input.replace(/^[a-zA-Z]*$/,'')

但不是返回Risk ,而是返回20153 Risk ,這是整行字符串。

您的第一個模式是定位每個非數字並將其替換為空。

另一方面,您的第二個模式只是定位模式的第一次出現,並且該模式正在尋找字符串的開頭,然后是字母,然后是字符串的結尾 沒有這樣的序列 - 如果您從字符串的開頭開始,則正好有零個字母,然后您離字符串的預期結尾很遠。 即使這樣有效,您也在刪除字母,而不是非字母。

此模式與您的第一個模式平行(刪除任何出現的非字母):

const cf_regex_character = cf_input.replace(/[^a-zA-Z]/g,'')

但 go 可能更好的方法是提取所需的 substring,而不是刪除它不是的所有內容:

const letters = cf_input.match(/[a-z]+/i)[0];
const numbers = cf_input.match(/\d+/)[0];

(如果您知道有這樣的 substring;如果您不確定,最好編寫一些防御性的代碼。)

/[^az]+/i

  • [方括號]表示一系列字符; 具體來說,在這種情況下az

  • 實際上i標志i不區分大小寫,因此也包括AZ

  • 插入符號^反轉模式; 這意味着,任何不在指定范圍內的東西。

  • +表示只要字符在該范圍內,就繼續向匹配中添加字符。

  • 然后停止匹配。

實際上,這將所有內容匹配到空間 20153 Risk

然后你用空字符串''替換這個匹配,你剩下的是Risk

 const string = '20153 Risk'; const result = string.replace(/[^az]+/i, ''); console.log(result);

 cf_input="20153 Risk" const cf_regex_character = cf_input.replace(/\d+\s/,'') console.log(cf_regex_character)

 str="20153 Risk" reg=/[az]+/gi res=str.match(reg) console.log(res[0])

暫無
暫無

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

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