Javascript 正则表达式试图将除特定模式之外的任何内容与允许的模式中的字符进行匹配
在本例中,我试图创建一个模式,该模式与除Javascript 正则表达式试图将除特定模式之外的任何内容与允许的模式中的字符进行匹配,javascript,regex,match,Javascript,Regex,Match,在本例中,我试图创建一个模式,该模式与除|或}之外的任何内容都匹配,但我也想了解在一般情况下如何执行此操作 也就是说,我想匹配任意字符任意次数,并在我点击或} 所以 然后像 var str = "abc}}"; str.match(regex) 应该返回abcabc,但我的甚至在使用debuggex数小时后都无法工作 我的问题是,我还需要被允许在我的比赛中有一个},所以仅仅从第一组中取出\}是不起作用的。 我甚至不明白这是怎么可能的,在其他表达式中,我需要能够识别[除了{,{:,{,{,{,{
|
或}
之外的任何内容都匹配,但我也想了解在一般情况下如何执行此操作
也就是说,我想匹配任意字符任意次数,并在我点击
或}
所以
然后像
var str = "abc}}";
str.match(regex)
应该返回abcabc
,但我的甚至在使用debuggex数小时后都无法工作
我的问题是,我还需要被允许在我的比赛中有一个}
,所以仅仅从第一组中取出\}
是不起作用的。
我甚至不明白这是怎么可能的,在其他表达式中,我需要能够识别[除了{,{:,{,{,{,{,{,}}]
之外的任何东西,而我无法掌握编写此代码的逻辑。
另外,如果我遗漏了一个需要转义的特殊字符或有多余的反斜杠,请告诉我。可能是这样的:
/(.+?)(\||}}||$)/
即:
捕获一个或多个任意字符的非贪婪匹配(.+?)
捕获(\\\\\\}}\\\\$)
或\\\\\\\
或}
(字符串结尾)的匹配$
.match()
返回的数组的第二项(如果存在匹配项):
var regex=/(.+?)(\\\\}\\\}\\$)/;
log(“abc}}”.match(regex));
log(“abc}def}”.match(regex));
log(“abc}123}456}x.match(regex));
console.log(“abc | def.match(regex));
console.log(“abc.match(regex))代码>这应该可以做到:
var regex=/(.*[^}}\\\\\]])/
()
表示一个捕获组,在您的示例中,这就是如何让它返回abc
一般翻译为:
*
任意数量的任意字符
[^
除了
}}\\\\\]
}}或|
(提示-是生成和测试正则表达式的非常方便的工具。)我不确定这是否有效。我认为问题在于它仍然将}}视为(+)的一部分。美元也有原因吗?它应该能够工作,即使它不是字符串的结尾,所以像粗体的“abc}123”粗体仍然只匹配粗体的“abc”粗体,但它也应该能够处理像粗体的“abc}123}456}x”粗体和匹配粗体的“abc}123}456”粗体。您是否单击了“运行代码段”并看到它工作了?正如我在上面第二个点中提到的,$
是子匹配的一部分,该子匹配匹配|
或}
或字符串的结尾。我已经编辑了我的答案,将您的示例“abc}123}456}x”
作为我的测试用例之一。我的错,一开始我不理解。那么在返回的数组中,所需的结果是否在[1]索引中?这有什么原因吗?同样的逻辑也适用于除{{,{:,{{{,{,{,{,{,{,}}之外的任何东西的情况吗?是的,数组索引1,因为这就是子匹配的工作方式,其中数组索引0是整个匹配(如果不希望在数组索引2中也包含第二组括号,可以将其更改为非捕获匹配)对于您的其他情况,如果您只想扩展包含{{
等的可能性,那么是的,只需在第二个()
组中添加更多选项。[^
用于匹配除后面的单个字符以外的任何字符,因此您不能将其用于[^}
…难以置信!这太简单了。因此,对于除了{{,{:,{{,{,{,{,{,{,}之外我需要任何东西的情况,我只会应用相同的逻辑,通过这5个到表达式的结尾?或者不..让我仔细检查一下Yeah nnnnnn是正确的,当我有abc | 123之类的东西时,它会失败
var str = "abc}}";
str.match(regex)
/(.+?)(\||}}||$)/