基本上我只希望它匹配()
内的任何。我尝试了.
和*
,但它们似乎无法正常工作。现在我的正则表达式看起来像:
\(([\\\[\]\-\d\w\s/*\.])+\)
它匹配的字符串是URL路由,如:
#!/foo/bar/([a-z])/([\d\w])/(*)
在这个例子中,上面的正则表达式匹配:
([a-z])
([\d\w])
(*)
<击>奖金:
如何才能使其仅在以(
开头并以)
结尾时匹配。我以为我使用了^
前面的\(
和$
以及\)
的结尾,但没有运气。
无视此奖金。我没意识到这没关系...
答案 0 :(得分:3)
基本上我只是希望它匹配
()
内的任何 奖励:我怎样才能使其仅在以(
开头并以)
结尾时匹配?
轻松自负。
var re1 = /^\(.*\)$/
// or
var re2 = new RegExp('^\\(.*\\)$');
回复:@Mike Samuel's评论
与原始中明确匹配的括号之间的换行符不匹配。
...
也许您应该使用[\s\S]
代替.
...
如果你要排除换行,你应该有意或明确地这样做。
请注意.
匹配除换行符之外的任何单个字符。如果您还想将换行符作为括号中“任何内容”的一部分,请使用[\s\S]
字符类:
var re3 = /^\([\s\S]*\)$/
// or
var re4 = new RegExp('^\\([\\s\\S]*\\)$');
答案 1 :(得分:3)
要取消匹配,请使用[^...]
构造。因此,要匹配括号内的任何内容,您可以使用:
\([^)]+\)
表示“匹配任何以左括号开头的字符串,包含任意数量的字符不关闭括号,并以右括号结束。
要匹配与上述构造匹配的整行,只需将其与^
和$
包裹在一起:
^\([^)]+\)$
答案 2 :(得分:3)
您是否担心嵌套括号?如果没有,您可以将其设置为匹配所有不是结束的字符:
\(([^)]*)\)
答案 3 :(得分:0)
我不完全确定我明白你在做什么,但试试这个:
var re = /\/(\([^()]+\)(?=\/|$)/;
除了开口paren之外,匹配前导斜线确保了paren确实在开头。你不能在最后做同样的事情,因为你不知道是一个尾随斜杠。如果有的话,你不想使用它,因为它也是下一次匹配尝试的前导斜杠。
相反,您使用前瞻 - (?=\/|$)
- 来匹配尾部斜杠而不使用它。如果没有斜线,我认为也不应该出现其他角色 - 因此锚点:$
。
\/(\([\s\S]+?\))(?=\/|$)
我说“草率”,因为它依赖于假设序列/(
和)/
永远不会出现在有效匹配中。与我的第一个正则表达式一样,您感兴趣的文本(即除了前导和尾部斜杠之外的所有内容)都将在#1组中捕获。
注意非贪婪量词。使用常规的贪婪量词,它将在一次拍摄中匹配从第一个(
到最后一个)
的所有内容。换句话说,它会匹配([a-z])/([\d\w])/(*)
而不是([a-z])
,([\d\w])
和(*)
。