javascript - "hotkey string"的正则表达式

标签 javascript regex

我们需要使用Javascript在字符串中找到搜索“热键”的表达式。 该选项几乎可以找到除序列之外的所有内容:Ctrl + M、K、o、i。因为他发现我们绝对不需要... :)

编辑:

(?=((ctrl|alt|shift|,|\.|\/)+?\s*[+\-/]\s*(((numpad\s*[\w/\*\-\+\.]+)|(ctrl|alt|shift|,|\.|\/|[a-z]+)+?,?)\s*(?=((([a-z],)\s*[a-z])\s*,?\s*)?)\1(?=([a-z])?)\1)))\1

测试多字符串变体,不区分大小写

<p>Ctrl + Insert, K</p>
<ul>Ctrl +,</ul>'
list Ctrl + , of end
colomn Ctrl + .</>'
<q>Ctrl + M</q>'
<a>Ctrl + M, K, o, i</a>
row Ctrl + M, , + P. While...
<rom>Ctrl + M, K, p</rom>'
<tag>Ctrl + M, Shift + O</tag>'
press Ctrl + M, Shift + O, , + P! Thanks.
Stop. Ctrl + M, Shift + O, / + P</end>
<anytag>Ctrl + Numpad +/-</anytag>'

我哪里错了?

*抱歉,由于信誉不足,我无法插入预览

最佳答案

在组 (ctrl|alt|shift|,|\.|\/)+? 中,它捕获一个 在字符类中,您没有转义 -,因此 [+-/] 确实充当“+ 的 ascii 值之间的字符( 43) 和/(47),即+,-./。 在 | 之前的最后一组中,您还允许它捕获第三个 .。 因此 ... 可以被捕获,您可以通过使用 [+\-/] 转义 - 来避免这种情况。

这是我认为可能适合您的版本:

(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)(\s*(,|\+)\s*((ctrl|shift|alt)\s*\+\s*)*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert))*(?=\W)

我正在使用https://regex101.com/实时查看比赛。

  1. 我一开始认为它应该捕获单位 (a-z,.+-/),所以我现在有 [a-z+\-.,/] (避免混淆我没有直接使用 [+-/]
  2. 然后,我们不应该将 Ctrl 或任何单词捕获为分开的比赛。所以我添加了一个正向回顾:[a-z+\-.,/](?=\W)
  3. 它应该以修饰键(Ctrl、Alt、Shift)作为序列开头 - 否则它可能会捕获正常的英语单词,例如 I:(ctrl|shift|alt)\s *\+\s*[a-z+\-.,/](?=\W)
  4. 突然,哦,Numpad0-9+-/ 也应该是单位,让我们将步骤 1 中的字符类设为一组,用于捕获单位:(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|小键盘\s*[0-9+\-/]+)(?=\W)
  5. 我还添加了 Insert 作为可捕获单位之一:(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|小键盘\s*[0-9+\-/]+|插入)(?=\W)
  6. 最后,让我们添加一个重复组,用于捕获第一个捕获的热键(修饰符 + 单位)之后出现的 ,(units):(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|小键盘\s*[0-9+\-/]+|插入)()*(?=\W)。是的,添加一个空白 ()* 以确保正则表达式仍然平衡并且适用于旧匹配。
  7. 我们将组 2 放入空括号中,以便它按我们的想法工作:,带单位:(ctrl|shift|alt)\s*\+\s*([a -z+\-.,/]|小键盘\s*[0-9+\-/]+|插入)(\s*,\s*([a-z+\-.,/]|小键盘\s* [0-9+\-/]+|插入))*(?=\W)
  8. 我们唯一无法捕获的是 、+ P/+ P,因为我们还没有捕获 unit + unit 组!我们可能会重复多次......最简单和最懒的方法 - 使 + 也作为分隔符(与 , 相同的级别): (ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|小键盘\s*[0-9+\-/]+|插入)(\s*(, |\+)\s*([a-z+\-.,/]|小键盘\s*[0-9+\-/]+|插入))*(?=\W)<
  9. 了解上述内容后,我们希望捕获 Ctrl + M、Shift + O、/+ P - 这意味着我们还应该在单位前面添加可选修饰符:( ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|小键盘\s*[0-9+\-/]+|插入)(\s*(,|\+)\s*((ctrl|shift|alt)\s*\+\s*)*([a-z+\-.,/]|小键盘\s*[0-9+\-/]+ |插入))*(?=\W)

关于javascript - "hotkey string"的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40332358/

相关文章:

python - 从包含多个数字的字符串中提取数字百分比

javascript - 如何以编程方式触发 ionic 中的双击事件?

JavaScript RegExp 在 IE11 中不工作,在 Chrome 中工作

c++ - 如何只获得给定的捕获组 <regex> C++

javascript - 将 Server.R 中的值访问到 .js 文件中

python - 按空格数拆分字符串

regex - 否定正则表达式以使用 MVC 验证属性

javascript - Ajax : function is not working

Javascript Office api 在 powerpoint 中插入图像

javascript - 重叠裁剪问题