pit*_*mer 7 javascript regex string match
我正在尝试匹配仅包含此字符类中的字符的单词: [A-z'\\/%]
,不包括以下情况:
<
和之间>
[
和之间]
{
和之间}
所以,假设我有这个有趣的字符串:
[beginning]<start>How's {the} /weather (\\today%?)[end]
Run Code Online (Sandbox Code Playgroud)
我需要匹配以下字符串:
[ "How's", "/weather", "\\today%" ]
Run Code Online (Sandbox Code Playgroud)
我试过使用这种模式:
/[A-z'/\\%]*(?![^{]*})(?![^\[]*\])(?![^<]*>)/gm
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,它匹配:
[ "[beginning]", "", "How's", "", "", "", "/weather", "", "", "\\today%", "", "", "[end]", "" ]
Run Code Online (Sandbox Code Playgroud)
我不确定为什么我的模式允许[
和之间的东西]
,因为我使用了(?![^\[]*\])
,并且类似的方法似乎适用于不匹配{these cases}
和<these cases>
。我也不确定为什么它匹配所有空字符串。
有什么智慧吗?:)
您的模式本质上存在两个问题:
如果您只想匹配字母,切勿在字符类中使用A-z
(因为它将匹配多个字母1)。相反,请使用a-zA-Z
(或A-Za-z
)。
*
在字符类后面使用量词将允许空匹配。请改用+
量词。
所以,固定模式应该是:
[A-Za-z'/\\%]+(?![^{]*})(?![^\[]*\])(?![^<]*>)
Run Code Online (Sandbox Code Playgroud)
演示。
1 字符[A-z]
类的意思是“匹配 ASCII 代码在 65 到 122 之间的任何字符”。问题在于 91 到 95 之间的代码不是字母(这就是原始模式匹配“[”和“]”等字符的原因)。