我发现了非常相似的帖子,但我不能在这里得到正则表达式.
我正在尝试编写一个正则表达式,它返回一个在两个其他字符串之间的字符串.例如:我想得到字符串"cow"和"milk"之间的字符串
我的奶牛总是给奶
会回来的
"总是给"
这是我到目前为止拼凑的表达式:
(?=cow).*(?=milk)
Run Code Online (Sandbox Code Playgroud)
但是这会返回字符串"cow always give"
这是一个在大多数正则表达式实现中都能正常工作的正则表达式:
(?<!filename)\.js$
Run Code Online (Sandbox Code Playgroud)
这匹配.js为一个以.js结尾的字符串,除了filename.js
Javascript没有正则表达式.是否有人能够组合一个替代正则表达式,实现相同的结果,并在JavaScript中工作?
这里有一些想法,但需要辅助功能.我希望用正则表达式实现它:http: //blog.stevenlevithan.com/archives/mimic-lookbehind-javascript
TL; DR:在.NET的lookbehinds中使用捕获(特别是平衡组)会改变获得的捕获,尽管它不应该有所作为.什么是.NET的外观打破了预期的行为?
我试图找到另一个问题的答案,作为借助.NET平衡组的借口.但是,我不能让他们在可变长度的lookbehind内工作.
首先,请注意我并不打算高效地使用这个特定的解决方案.这更多是出于学术原因,因为我觉得可变长度的lookbehind有一些我不知道的事情.并且知道这可能在将来派上用场,当我真的需要使用这样的东西来解决问题时.
考虑这个输入:
~(a b (c) d (e f (g) h) i) j (k (l (m) n) p) q
Run Code Online (Sandbox Code Playgroud)
我们的目标是匹配所有的字母,这是由前括号内~,没有多么深跌(所以一切从a到i).我的尝试是检查后视镜中的正确位置,以便我可以通过一次调用获得所有字母Matches.这是我的模式:
(?<=~[(](?:[^()]*|(?<Depth>[(])|(?<-Depth>[)]))*)[a-z]
Run Code Online (Sandbox Code Playgroud)
在lookbehind我尝试找到一个~(,然后我使用命名组堆栈Depth来计算无关的开括号.只要打开的括号~(永远不会关闭,那么lookbehind应该匹配.如果到达(?<-Depth>...)那个右括号,则无法从堆栈中弹出任何内容,并且lookbehind应该失败(即,对于所有来自的字母j).不幸的是,这不起作用.相反,我匹配a,b,c,e,f,g和m.所以只有这些:
~(a b (c) _ (e f (g) _) _) _ (_ (_ (m) _) _) _
Run Code Online (Sandbox Code Playgroud)
这似乎意味着,一旦我关闭了一个单一的括号,看起来就无法匹配任何东西,除非我回到我以前最高的嵌套水平.
好吧,这可能只是意味着我的正则表达式有些奇怪,或者我没有正确理解平衡组.但后来我尝试了这个没有外观.我为每个字母创建了一个字符串,如下所示:
~(z …Run Code Online (Sandbox Code Playgroud)