javascript - Javascript 匹配的次数少于 n 次,即使它已明确设置为匹配 n
问题描述
好的,所以,我有这个模式
^(([0-9*\/]+)\s??){7}$
默认情况下,它应该匹配可以具有以下示例形式之一的 7 个段:
[0/2, *, 2, /]
问题是,这匹配:
* * 0/2 * *
- 不正确* * * * * * *
- 正确的* 0/2 * * * 2 *
- 正确的* 0/2 0/2
- 不正确
在 C# 中,我只会在第一个捕获组上使用 ++,它会起作用,但是 Javascript 有一个过时的正则表达式,它缺少关键功能。
这是重现的游乐场:https ://regex101.com/r/Pk23dV/1
解决方案
该(([0-9*\/]+)\s??){7}$
模式是^((a)b?){x}$
其中a
部分是强制性的并且b
部分是可选的类型。也就是说,{7}
正则表达式中的量词意味着必须至少出现七次与[0-9*\/]
模式匹配的字符,无论是连续的还是用空格分隔的。
如果您想在部分\s
之间编写一个必须的表达式[0-9*\/]+
,您可以使用
^[0-9*\/]+(?:\s[0-9*\/]+){6}$
^(?:([0-9*\/]+)(?:\s(?!$)|$)){7}$
正则表达式详细信息
^
- 字符串的开始[0-9*\/]+(?:\s[0-9*\/]+){6}
- 一位或多位数字,/
或*
然后出现六次空格,然后是一位或多位数字,/
或*
(?:([0-9*\/]+)(?:\s(?!$)|$)){7}
- 七次出现一个或多个数字,/
或者*
如果不在字符串末尾或字符串末尾,则后跟一个空格$
- 字符串结束。
推荐阅读
- c++ - 在考虑对齐要求时一般重载 operator new
- delphi - Delphi tethering ResourceReceived 无法更新 TLabel
- ios - iOS - 打开错误的应用程序时出现奇怪的 openURL 问题
- java - How to summarize a object type in swagger?
- php - 无法将管理员类型分配给我的创建管理员命令
- elasticsearch - Painless: Get time difference
- python - DJANGO 将 AJAX 请求中的新结果值渲染到 HTML 页面
- reactjs - React Profiler - 开始分析并重新加载页面?
- matlab - 如果输入数字列表而不是单个数字,则函数返回错误数据
- angular - 在Angular 2中将数据从父视图传递到子视图