[英]Complex regular expression in JavaScript
我有這個任務:將字符串中的所有數字求和並執行乘法
input: "3 chairs, 2 tables, 2*3 forks" result: 11
我已經有正則表達式可以做到這一點:
eval(str.match(/(\d[\d\.\*]*)/g).join(' + '))
但我想添加選項以忽略方括號“()”中的數字
input: "2 chairs, 3 tables (1 broke)" result: 5
怎么做?
正則表達式總是讓我痛苦:(
一種簡單的方法是進行第一遍並刪除所有帶括號的表達式。
str = str.replace(/\([^\)]*\)/g, "");
// now run your original algorithm to sum/multiply...
// ...
這不是超級有效,但可以完成工作。
我應該注意,這不處理嵌套的括號,但在這里似乎不是必需的。
(?=(\d+[\d.*]*)(?![^(]*?\)))\1
(?=(
開始使用前瞻性捕獲一個組
(\d+[\d.*]*)
是您的號碼的捕獲組
(?![^(]*?\))
是一個負向正向查找,可確保在數字后沒有開括號
)\1
期待這里的末端與找到的號碼匹配。
您可以使用indexOf()
和lastIndexOf()
來檢測最外面的括號,以便擺脫想要的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.