簡體   English   中英

如何在javascript中匹配此正則表達式

[英]how to match this Regular Expressions in javascript

我試圖找到一種方法來解決這個問題,但我迷失了

我希望它匹配一個數學方程式,如果滿足以下條件,它將接受字符串:

  • 字符串中任何位置的“ +-* /%”,但不包括輸入字符串的最后一個字符
  • 它接受浮點數和整數
  • 它不接受字母,只接受數字和符號

有什么幫助嗎?

提前致謝 !!

您要使用的正則表達式如下所示:

-?\d+(?:\.\d+)?([*/%+-]-?\d+(?:\.\d+)?)+

基本上這意味着:

NUMBER (OPER NUMBER)*

數字定義為:

  • 可選的減號;
  • 一個或多個數字;
  • (可選)一個句點,后跟一個或多個數字。

現在,主要的可選減號並不嚴格符合您的要求,因此您可以放心地刪除它,但是如果沒有它,您將無法識別:

-3*-4

這一起違反了您兩個操作數的條件。 丟掉就丟-? 從表達式(在兩個地方),即:

\d+(?:\.\d+)?([*/%+-]\d+(?:\.\d+)?)+

還不清楚您是要接受多個操作數還是只接受一個操作數。 如果只是一個,那么:

-?\d+(?:\.\d+)?[*/%+-]-?\d+(?:\.\d+)?

要么

\d+(?:\.\d+)?[*/%+-]\d+(?:\.\d+)?

或允許空格( \\s )的變體。 您可能還希望使用括號捕獲組。

您可能需要更改該定義。

您也可以考慮在數字和操作數之間留空格。

用法示例:

var s = "-11.32 * -34";
var r = /(-?\d+(?:\.\d+)?)\s*([*/%+-])\s*(-?\d+(?:\.\d+)?)/;
var m = r.exec(s);
if (m != null) {
  alert("First: " + m[1] + "\nOperand: " + m[2] + "\nSecond: " + m[3]);
} else {
  alert("Not found");
}

編輯以回答修改后的問題。

  • 位數: [0-9]
  • 號碼: [0-9]+
  • 帶可選小數部分的數字: [0-9]+(?:\\.[0-9]+)?
  • 這些數字之一(可選)后跟一個運算符:
    ([-+/%*])?([0-9]+(?:\\.[0-9]+)?)
  • 上述之一,然后是零個或多個運算+密碼對:
    ([-+/%*])?([0-9]+(?:\\.[0-9]+)?)(([-+/%*])([0-9]+(?:\\.[0-9]+)?))*

這實際上不是一個等式,因為沒有=符號。

並且您可以在上述任何一個中用\\ d替換[0-9] 我有一個明確指定范圍的習慣,因為emacs不會\\ d。

暫無
暫無

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

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