我有一個 textNode,其中的資料是這樣的data=$(2000)%,所以我想將符號和數字分開。
let preText = ''
let number = ''
let postText = ''
let data = '$(2000)%'
const regex = new RegExp(`(\(\[)?[0-9]{1,3}(?:,[0-9]{1,3})*(\.[0-9]{1,5})?(\)\])?`);
data.match(regex)
Output expected:
preText = '$('
number = '2000'
postText = ')%'
另一個例子:如果data=$2,23,603,輸出應該是preText=$,number=2,23,603和postText=。
我無法使用不同的變數來實作這一點,我怎樣才能獲得所需的輸出?
uj5u.com熱心網友回復:
您可以使用
const data = '$(2000)%';
const regex = /^(.*?)((?:\d{1,3}(?:,\d{1,3})*|\d )(?:\.\d{1,5})?)(\D.*)?$/;
const [_, preText, number, postTex] = data.match(regex);
console.log([preText, number, postTex]);
詳情:
^- 字串的開始(.*?)- 組 1 (preText):除換行符以外的任何零個或多個字符,盡可能少((?:\d{1,3}(?:,\d{1,3})*|\d )(?:\.\d{1,5})?)- 第 2 組 (number):一到三位數后跟零次或多次出現的逗號和一到三位數,或僅一或多位數,然后是 a.和一到五位數的可選序列(\D.*)?- 第 3 組 (postTex),可選:一個非數字字符,然后是除換行符以外的零個或多個字符,盡可能多$- 字串的結尾。
uj5u.com熱心網友回復:
關于模式的一些注意事項:
- 首先測驗你的代碼,這是錯誤資訊:
未捕獲的語法錯誤:無效的正則運算式:/(([)?[0-9]{1,3}(?:,[0-9]{1,3})*(.[0-9]{1,5 })?()])?/: 未終止組
- 除此之外,您必須在 RegExp 建構式中對反斜杠進行雙重轉義
- 括號之間是4位2000,
[0-9]{1,3}只能匹配1-3位。 - 模式 like
\(\[僅在兩者([都存在時才匹配 - 模式不匹配
$或%無法在輸出中
你可以做什么要么使用像這樣的字符類捕獲左側和右側組中的所有可能的符號 [$\[(]
([$\[(]*)\b((?:[0-9]{1,3}(?:,[0-9]{1,3})*(?:\.[0-9]{1,5})?)|\d )\b([\])%]*)
正則運算式演示
或者可選地匹配匹配數字\D*周圍的所有非數字:
(\D*)\b((?:[0-9]{1,3}(?:,[0-9]{1,3})*(?:\.[0-9]{1,5})?)|\d )\b(\D*)
正則運算式演示
如果匹配,則捕獲組編號為 1、2 和 3:
let data = '$(2000)%'
const regex = /([$\[(]*)\b((?:[0-9]{1,3}(?:,[0-9]{1,3})*(?:\.[0-9]{1,5})?)|\d )\b([\])%]*)/;
const m = data.match(regex);
console.log(m);
if (m) {
preText = m[1];
// etc..
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/358700.html
標籤:javascript 正则表达式
下一篇:只需要正則運算式中的一個數字
