我们需要在 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>'
我哪里错了?
*抱歉,由于声誉不足,我无法插入预览
答案 0 :(得分:2)
在小组(ctrl|alt|shift|,|\.|\/)+?
中,它会抓取.
在角色类中,您尚未转义-
,因此[+-/]
确实充当了+
(43)和/
的ascii值之间的#34;字符(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/来实时查看匹配项。
a-z,.+-/
)所以我现在有[a-z+\-.,/]
(为了避免混淆,我没有直接使用[+-/]
。C
,t
,r
,l
或任何单词作为分开的匹配。所以我添加了一个积极的lookbehind :[a-z+\-.,/](?=\W)
I
:(ctrl|shift|alt)\s*\+\s*[a-z+\-.,/](?=\W)
Numpad
0-9+-/
(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+)(?=\W)
也应该是单位,让我们将第1步中的角色类分组,用于捕获单位:Insert
(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)(?=\W)
添加为可捕捉单位之一:,(units)
(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)()*(?=\W)
的重复组:()*
。是的,添加空白, with units
以确保正则表达式仍然是平衡的并且适用于旧匹配。(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)(\s*,\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert))*(?=\W)
:, + P
/ + P
和unit + unit
,因为我们还没有捕获+
个群组!我们可能会重复多次......最简单,最懒惰的方式 - 将,
也作为分隔符(与(ctrl|shift|alt)\s*\+\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert)(\s*(,|\+)\s*([a-z+\-.,/]|Numpad\s*[0-9+\-/]+|insert))*(?=\W)
相同):Ctrl + M, Shift + O, / + P
(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)
- 这意味着,我们还应在单元前面添加可选修饰符:<TabControl x:Name="messageTabControl">
<TabControl.ContentTemplate>
<DataTemplate>
<ScrollViewer Name="Scroll" CanContentScroll="True">
<TextBlock Name="messageTabTextBlock" Text="test"/>
</ScrollViewer>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>