javascript - 无法匹配除 ' 和 " 之外的任何字符的正则表达式
问题描述
我写了一个正则表达式来匹配字符串
{{AB.group.one}}:"eighth",{{AB.group.TWO}}:"third",{{attr1111}}:"fourth","fifth":{{attr_22_2qq2}},"sixth":{{AB.group.three}},{{ab.group.fourth}}:"seventh","ninth":{{attr1111}}}
正则表达式:
/[^'"]({{2}[a-zA-Z0-9$_].*?}{2})[^'"]/gi
打破上面的正则表达式:
[^'"]
'
: 以既不是也不是的字符开头"
。({{2}[a-zA-Z0-9$_].*?}{2})
: 正好有 2{{
,然后是范围内的任何字符a-zA-Z0-9$_
。之后,正好 2}}
[^'"]
'
: 除和之外的任何字符"
。
下面的匹配不是完全匹配,而是捕获的组。我将对捕获的组执行我的操作,因此为简单起见,我们可以将它们视为我们的匹配项。
预期匹配:
{{AB.group.one}}
{{AB.group.TWO}}
{{attr1111}}
{{attr_22_2qq2}}
{{AB.group.three}}
{{ab.group.fourth}}
{{attr1111}}}
结果匹配:
{{AB.group.TWO}}
{{attr1111}}
{{attr_22_2qq2}}
{{AB.group.three}}
{{attr1111}}}
如下图所示{{AB.group.one}}
,{{ab.group.fourth}}
不匹配。我希望它们也能匹配它们。
我知道他们不匹配的原因。
{{AB.group.one}}
不匹配的原因是因为[^'"]
需要一个字符,除了'
and"
而我没有提供一个。如果我替换[^'"]
为["'"]*
,它会起作用,但在这种情况下"{{AB.group.one}}"
也会匹配。
因此,问题陈述是匹配前后的任何字符(如果有的话){{
,}}
但字符不能是'
or"
。
{{ab.group.fourth}}
不匹配的原因是因为这个匹配之前的字符,
是另一个匹配的一部分。这只是我的猜测,原因可能是别的。{{AB.group.three}},
但是,如果我在和{{ab.group.fourth}}
(例如)之间包含任何字符{{AB.group.three}}, {{ab.group.fourth}}
,则模式匹配。我不知道如何解决这个问题。
请帮我解决这两个问题。谢谢你。
解决方案
这是一种似乎有效的基于正则表达式的方法。首先,我们可以将所有双引号术语串起来,然后用一个逗号分隔符替换逗号/冒号岛。最后,以逗号分隔以生成术语数组。
var input = "{{AB.group.one}}:\"eighth\",{{AB.group.TWO}}:\"third\",{{attr1111}}:\"fourth\",\"fifth\":{{attr_22_2qq2}},\"sixth\":{{AB.group.three}},{{ab.group.fourth}}:\"seventh\",\"ninth\":{{attr1111}}},\"blah\":\"stuff\",{{one}}:{{two}}";
var terms = input.replace(/\".*?\"/g, "").replace(/[,:]+/g, ",").split(",");
console.log(terms);
推荐阅读
- ios - 低于 11 的 iPhone 上的 Unity iOS 构建大小相差两倍
- azure - 为什么我仍然在电子邮件签名中看到旧的 Azure AD B2C 租户名称?
- c++ - 函数模板不会在 VS2019 express 中编译
- php - 如何在 PHP 中将对象 json_encode 到数组中?
- javascript - React-native eas-build 在内部和生产分布上失败了 android/ios
- api-platform.com - 为什么在 Symfony 项目中使用“php bin/console cache:clear”命令时会收到与 PHP8 #[ApiResource()] 属性相关的错误?
- powershell - Windows上带有冒号的ffmpeg尾随选项
- android - 在后台线程中调用 createCaptureSession
- tensorflow - 使用 TF Lite Model Maker 创建的模型出现 TF.js 导入错误
- reactjs - React:如何使商店对重新加载无懈可击?