簡體   English   中英

如何在javascript中使用正則表達式來匹配數字和符號?

[英]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.

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