[英]How do I use Regular Expressions in javascript to match numbers and symbols?
說我有一個像下面這樣的字符串:
var str = "23*45+ 4*12"
我如何使用正則表達式返回
["23","*","45","+","4","*","12"]
您將如何同時包含小數和負數?
var str1 = "45.3*23+(-4*5.8)
結果應如下所示:
["45.3","*","23","+","-4","*","5.8"]
由於我是正則表達式的新手,請解釋您的答案。 謝謝!
解決您的特定問題的最簡單的方法是在單詞邊界上分割:
$ node
> "23*45+ 4*12".split(/\b/)
[ '23', '*', '45', '+ ', '4', '*', '12' ]
正則表達式/\\b/
在此處描述。
現在,由於您有空格,您可能應該修剪每個結果:
$ node
> "23*45+ 4*12".split(/\b/).map(function (s) {return s.trim()})
[ '23', '*', '45', '+', '4', '*', '12' ]
現在,如果您只想捕獲數字和算術運算符,則可能應該直接匹配它們,而不是依賴於拆分。 匹配整數的正則表達式為
\d+
是一個或多個數字,並且匹配運算符的正則表達式是
[=+/*]
請注意,我將破折號放在第一位,因為如果它在中間,它將是一個字符范圍(例如[az]
匹配26個字符,而[-az]
僅匹配三個字符)。 現在您可以執行以下操作:
$ node
> "23*45+ 4*12".match(/[-+/*]|\d+/g)
[ '23', '*', '45', '+', '4', '*', '12' ]
g
是正則表達式的修飾符,表示獲取所有匹配項( g
代表“全局”)。 關於最后一種方法的一個有趣的事情是它將跳過不屬於的字符,因此可能發生:
$ node
> "23 * blah45 + 4*~~~~12".match(/[-+/*]|\d+/g)
[ '23', '*', '45', '+', '4', '*', '12' ]
現在,假設您要添加浮點數。 這些看起來像22.807
,即數字,然后是點,然后是更多數字。 該點在正則表達式中很特殊,因此我們必須這樣寫: \\.
。 因此,為了捕獲可以是整數或浮點值的內容,我們將編寫:
\d+(\.d+)?
在哪里?
表示可選。 現在我們還可以添加一個前導的可選負號:
-?\d+(\.\d+)?
從編程中可以知道,我們喜歡編寫數字255.84E-19
,這使我們能夠:
-?\d+(\.\d+([Ee][+-]?\d+)?)?
帶有可選的指數部分,包含大寫或小寫字母E,然后是可選的符號,然后是必需的指數編號。
然后是關於括號在“非捕獲”上下文中存在性能問題的問題(此處難以解釋),因此專業人士會寫:
-?\d+(?:\.\d+(?:[Ee][+-]?\d+)?)?
在所有的榮耀中
$ node
> "23 * -99.45 + 4.2E7 * -12".match(/-?\d+(?:\.\d+(?:[Ee][+-]?\d+)?)?|[-+*/]/g)
[ '23', '*', '-99.45', '+', '4.2E7', '*', '-12' ]
這里有很多事情。 很抱歉深入了解它。
順便說一句,正則表達式無法解決解析算術表達式並對其進行驗證的一般問題,但是希望這種解釋可以幫助您入門。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.