javascript - 正则表达式在一处字符失败但如果稍后使用字符则匹配

标签 javascript regex

我有一个正则表达式(Javascript),它可以采用空格,后跟可选符号 [-+],后跟数字字符 [0-9.,],后跟更多可选空格。我想要做的是确保下一个字符不是 +、-、*、/或 ^。下一个字符可以是任何其他文本,一旦输入其他文本,就可以包含任何数学符号。这是我到目前为止所拥有的:

^\s*[-+]?[0-9,.]+\s*[^-+*/^].*$

这允许“23 +”和“23 df+”匹配,但我只希望后一个示例匹配。如果我在末尾处留下 .* ,那么“23 +”和“23 df+”都会失败。我认为数学字符的括号表达式 [^-+*/^] 将匹配下一个字符,然后 .* 将匹配之后的字符,但事实并非如此情况似乎确实如此。

任何人都可以帮助解释如何修复它以及我哪里出错了吗?我是正则表达式新手,想从错误中吸取教训。

更新更多示例。

"23" should match

"-23" should match

"23.5" should match

"2,345.5" should match

"23+" should not match (same for -,asterisk,/,^)

"23 +" should not match (same for -,asterisk,/,^)

"23 text" should match

"23 text+" should match (same for -,asterisk,/,^ in place of +)

"23 text +" should match (same for -,asterisk,/,^ in place of +)

最佳答案

正则表达式是贪婪的。因此,只要有可能,它就会尝试始终匹配。

因此,对于字符串“23 +”,您的正则表达式将执行以下操作:

  • [0-9,.]+ 匹配 23
  • \s* 匹配 NOTHING(由于 *)
  • [^-+*/^] 将匹配您的空格。
  • .* 将匹配“+”。

(更新:请参见此处:http://regex101.com/r/gY5pS1)

使用您的模式,您需要通过排除空格和数字来最小化最后一组。

^\s*[-+]?[0-9,.]+\s*[^-\s0-9+*/^].*$

仅添加空格将导致您的正则表达式再次进行错误的匹配,并开始捕获该组中的“3”:

  • [0-9,.]+ 将匹配 2
  • \s* 将匹配 NOTHING
  • [^-\s+*/^] 将匹配 3
  • .* 将匹配其余部分。

(更新:请参见此处:http://regex101.com/r/yA3tA6)

显然是错误的,因此也从最后一组中排除 0-9。我希望这能解决您的两个问题。

关于javascript - 正则表达式在一处字符失败但如果稍后使用字符则匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18727519/

相关文章:

javascript - jQuery - 匹配具有以特定字符串开头的类的元素

javascript - 正则表达式中的运算顺序(解决挑战)

java - 正则表达式捕获组

regex - R-正则表达式提取破折号和句点之间的字符串

javascript - 目录 : Multiple remote_function calls on single :onclick

javascript - JQuery keyup() keydown() 和 keypress() 不适用于 iPad 和蓝牙键盘

javascript - 如何用html标签替换匹配模式?

java - 使用 Scanner 类解析字符串

c - C语言正则表达式匹配字符串(忽略大小写)

javascript - 掷骰子游戏的重置功能