问题标签 [regex-lookarounds]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 感叹号的正向前瞻
我正在尝试构建一个 Java 正则表达式来匹配“ .jar!
”
问题是我不希望匹配器消耗感叹号。我尝试使用Pattern.compile("\\.jar(?=!)")
但失败了。就像逃避感叹号一样。
任何人都可以让它工作还是这是一个 JDK 错误?
更新:我觉得自己像个白痴,Pattern.compile("\\.jar(?=!)")
确实有效。我使用的是 Matcher.matches() 而不是 Matcher.find()。
regex - 选项组内的正则表达式前瞻
我正在匹配 url,所以我可以将请求连接到控制器/视图,并且有几个 url 有多个选项,其中只有一个可以在 url 后面有任何内容,但我还需要后面的内容可作为命名组使用。
例子:
- /admin/某事#match
- /admin/something/new #match
- /admin/something/new/id #失败
- /admin/something/edit #失败
- /admin/something/edit/id #match
还有很多其他的可能性,但这足以作为一个例子。基本上,如果 url 以 'new' 结尾,什么都不能跟随,而如果它以 'edit' 结尾,它也必须有一个 id 才能编辑。
到目前为止我一直在使用的正则表达式:
空格爆炸版本:
但是如果 url 是“/admin/something/edit/id”,那么“action”组就是“edit/id”。我一直在控制器中使用一些字符串操作来将动作缩减为......动作,但我觉得积极的前瞻会更清晰。我只是无法让它发挥作用。
我一直在使用的前瞻正则表达式:(将匹配“新”,但不匹配“编辑”[带或不带 id])
任何提示/建议将不胜感激。
regex - 在 URL 中添加斜杠
在 Google 上添加斜杠 .htaccess有很多结果,但我发现的所有示例都需要使用您的域名,如下例所示:
我的问题是硬编码的域名在我的本地开发机器上不起作用。有没有办法在不明确告诉 mod_rewrite 域名的情况下添加斜杠?
regex - 正则表达式条件前瞻/回溯?
嘿伙计们,我想问你是否可以使用前瞻或任何其他机制对单个正则表达式进行一些条件检查。
例如,在我的正则表达式中,如果前一个值超过 3,我希望下一个值的范围为 0-5,如果前一个值低于 3,则范围为 0-9。
例如:
[0-9] 下一个匹配应该是 [0-5] 或 [0-9],具体取决于前一个值是小于还是大于 5。
因为代码是这样想的:
称之为 A--> [0-9][0-9]<-- 称之为 B
如果 (A < 5) 则 B [0-9] 否则 B [0-5]
这可以作为单个正则表达式吗?
javascript - JavaScript:好的部分;为什么前瞻不好?
我正在阅读 Douglas Crockfords Javascript: The Good Parts,我刚刚完成了正则表达式一章。在本章中,他称 JavaScript 的\b
正向预读(?=)
和负向预读(?!)
“不是一个好部分”
他解释了\b
不好的原因(它\w
用于单词边界查找,并且\w
对于任何使用 unicode 字符的语言都失败了),这对我来说似乎是一个很好的理由。
不幸的是,正负前瞻不好的原因被遗漏了,我想不出一个。掌握正则表达式向我展示了前瞻带来的强大功能(当然也解释了它带来的问题),但我真的想不出任何可以将其定性为“不好的部分”的东西。
谁能解释为什么 JavaScript (positive|negative) lookahead 或 (positive|negative) lookahead 一般应该被认为是“不好的”?
regex - 正则表达式:正向前瞻和单词边框问题
再次向 Stackoverflow 的人们问好!
假设我有这些词:智能手机、智能手机
我想匹配其中的子字符串“电话”。但是,在这两种情况下,我只希望返回“电话”,而不是第一种情况下的“电话”。除此之外,我只希望“电话”这个词只是一个后缀时才匹配,例如:
fonephonetics(只是一个例子)不匹配。
我假设正则表达式
会给我我需要的东西,但它目前匹配“phones”和“phone”,但不是“fonephonetics”。我不需要“电话”。对于这两种情况,我都想要“电话”。
关于什么是错的,我能做什么的任何想法?
先感谢您!
regex - 正则表达式、前瞻和后视的命名约定
为什么它是反直觉的?
/(?<!\d)\d{8}(?!\d)/
,这里先(?<!\d)
来,但叫lookbehind,next,但叫lookahead。所有这些都是反直觉的。(?!\d)
以这种方式命名它的原因是什么?
regex - 正则表达式负前瞻
我需要修改这个正则表达式
符合这个...
不匹配这个...
试过这个,但没有运气
任何帮助将非常感激。
谢谢,艾尔。
java - 前瞻和分组
在Java中,在类似的文本上foo <on> bar </on> thing <on> again</on> now
,我应该想要一个带有组的正则表达式,它给我一个查找“foo”、“bar”、空字符串,然后是“thing”、“again”、“now”。
如果我这样做(.*?)<on>(.*?)</on>(?!<on>)
了,我只会得到两组(foo bar,又一次,而且我还没有结束“现在”)。
如果我这样做了,(.*?)<on>(.*?)</on>((?!<on>))
我会得到foo bar 空字符串,然后再做一次空字符串(这里我应该想要“现在”)。
请问神奇的公式是什么?
谢谢。
regex - 正则表达式 Postive Lookahead 子字符串
我对正则表达式相当陌生,我使用它们的次数越多,我就越喜欢它们。我正在研究一个必须满足以下条件的正则表达式:
- 必须以 Alpha 字符开头
- 在接下来的三个字符中,至少一个必须是 Alpha 字符。
- 前四个字符之后的任何内容都是自动匹配。
我目前有以下正则表达式:^[a-zA-Z](?=.*[a-zA-Z]).{1}.*$
我遇到的问题是,我的积极前瞻(?=.*[a-zA-Z]).{1}
并不局限于字母字符之后的下三个字符。
我觉得好像我在这里错过了一个概念。我从这个表达中遗漏了什么?
谢谢大家。