问题标签 [regex-look-ahead]
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.
regex - 如何将前瞻正则表达式拆分为 2 个普通正则表达式?
我有一个前瞻正则表达式[^a-z0-9%*][a-z0-9%]{3,}(?=[^a-z0-9%*])
。在我的测试中,它从中提取 4 个子字符串@@||imasdk.googleapis.com/js/core/bridge*.html
:
|imasdk
.googleapis
.com
/core
我需要用 2 个旧的正则表达式重写它,因为我不能使用前瞻(正则表达式引擎不支持)。我已将其拆分为[^a-z0-9%*][a-z0-9%]{3,}
and[^a-z0-9%*]
并在匹配后检查子字符串中的每个第一个正则表达式匹配。
出于某种原因,它也提取 /bridge
了.
未列出[^a-z0-9%*]
并在之后找到的/bridge
。那么前瞻是如何工作的:它必须是完全匹配、substr(find
结果)还是其他任何东西?这是否意味着在这种情况下,每个结尾字符都不应来自集合a-z0-9%*
?
在 Rust 中,代码如下所示:
测试输出:
^ 这里你可以看到/bridge
是由于跟随.
而发现的,它是不正确的。
javascript - 带有 highlight-text-inside-a-textarea 和 JS RegExp 的半高亮关键字
我正在使用 highlight-text-inside-a-textarea 插件https://codersblock.com/blog/highlight-text-inside-a-textarea/工作正常,但我对重音词有疑问。例如,这是我要突出显示的关键字数组,$kw = array("excel","Réseau","R","electrom");
但正如您所见,关键字“electromécanique”正在突出显示一半。我怎样才能避免这种情况?这可能与正则表达式有关。
javascript - 正则表达式匹配以破折号分隔的单词或仅匹配单个单词
因此,对此的要求是匹配人的姓氏,每个姓氏之间用破折号分隔。
我为此使用的基本 RegEx 是这个:
基本上我将其限制为拉丁字母字符,包括一些重音字符。
如果我使用以下示例,这将非常有效:
- 佩雷斯-冈萨雷斯
- 多明格斯-迪亚兹
- 居梅斯-马丁内斯
但是我忘了考虑这个人只有一个姓氏的情况。
我尝试执行以下操作。
我\
在第一个匹配选项的允许字符中添加了一个或空格。我为没有空格的单个单词添加了 or 条件。
虽然它适用于某些情况,但有两个问题。
- 对于这样的用例,我认为这不是最佳的 RegEx。
- 我偶然发现了姓氏复杂的人的具体案例。
关于第2点,我指的是:
- 约翰逊-德索萨
RegEx 匹配它,但它不再将破折号视为分隔符。
我不确定如何处理。
此外,由于我添加了空格,它不再尊重单词之间的破折号的要求。
我在想可能是限制名称之间的空格数,例如在姓氏之间最多允许 2 或 3 个空格,例如:
- Pérez-De la Cruz - 这适用于我的 RegEx
- Pérez De la Cruz-González - 这不是
可以是有效匹配。
我不是 RegEx 的专业人士,因此我们将不胜感激。
更新
我确实没有提到我需要能够将它与 JavaScript 一起使用。PHP 也可能有用,但我正在做一些浏览器验证,并且模式需要兼容。
regex - 正则表达式匹配字符串的第一部分(直到第一次出现的空格字符),如果它不包含序列 ;host=
我有这个字符串cpu.usage_system;cpu=cpu-total;host=host1 6.94024205748818 1626401140
(带有标签支持的石墨度量消息)。
我正在尝试匹配字符串的第一部分,直到第一次出现空格字符......但前提是字符串的第一部分不包含;host=
.
我可以匹配所有字符,直到第一次出现空格^([\S]+)
。我觉得我应该使用负前瞻来检查是否存在,;host=
但我不知道如何将它们放在一起。
这个想法是匹配度量标签的第一部分(&标签),看看是否包含主机标签,如果它确实包含主机标签......别管它。如果它不包含主机标签,请附加一个。
regex - 仅当 n 行之前的另一个字符串在任何支持 PCRE 的文本编辑器中匹配时,正则表达式匹配 n 行之后的字符串
我有一个 PHP 数据库配置文件(在支持 PCRE 的代码编辑器中打开),其中包含用于生成连接字符串的各种引擎凭据。
现在正如我在问题标题中提到的那样,我想匹配某个字符串“DB_DATABASE”,前提是在 n 行(比如说 3)之前存在 'mysql',如下所示:
如果我在 3 行之前说它不应该匹配 4 行之前的“mysql”,即它不应该匹配'mysql' => [
。请注意,除了此处提到的之外,还有其他 DB 引擎连接详细信息,因此需要匹配 mysql 并且仅当它恰好出现在上面 3 行时DB_DATABASE
。
我尝试了一些复杂的正则表达式,但没有一个能给我想要的,让我提一个我认为至少接近但徒劳的:
感谢任何努力帮助解决此问题的人...
python - 在python中结合正负前瞻
我正在尝试提取满足许多条件的令牌,我正在使用前瞻来实现以下两个条件:
- 标记必须是数字/字母数字(即,它们必须至少有一个数字)。它们可以包含一些特殊字符,例如 -
'-','/','\','.','_'
等,
我想匹配像这样的字符串:165271
,,,,agya678
yah@123
kj*12-
- 标记不能有连续的特殊字符,例如:
ajh12-&
我不想匹配像这样的字符串:ajh12-&
,671%&i^
我对第一个条件使用积极的前瞻:(?=\w*\d\w*)
对第二个条件使用消极的前瞻:(?!=[\_\.\:\;\-\\\/\@\+]{2})
我不确定如何结合这两个前瞻条件。
任何的意见都将会有帮助。提前致谢。
编辑 1:
我也想提取作为较大字符串一部分的完整标记(即,它们可能存在于字符串中间)。
我想匹配字符串中的所有标记:
165271 agya678 yah@123 kj*12-
并且字符串中没有任何标记(甚至不是标记的一部分):ajh12-& 671%&i^
为了强制正则表达式考虑整个字符串,我也在\b
上述正则表达式中使用了:(?=\b\w*\d\w*\b)
和(?!=\b[\_\.\:\;\-\\\/\@\+]{2}\b)
regex - 我需要使用正则表达式从以下阶段获取金额值
- 这里有一些文字
- 这里有一些文字
- 金额:#4,227,361,94#
- 这里有一些文字
- 这里有一些文字
- 金额:#227,361,94#
php - PHP preg_split() 如果它不是数字、+ 号、括号、换行符或制表符
我有以下操作,只要遇到字母就会拆分字符串:
我想以这样一种方式扩展它,只要遇到的变量不是数字、括号、加号、连字符、换行符或制表符,它就会拆分字符串。
我写了一个可以匹配上面的正则表达式:
但我需要否定它,以便在被比较的值不是它时匹配。非常感谢我能得到的任何及时帮助。
谢谢你。
regex - 在 Active Directory 规范路径之后搜索组名的正则表达式
正则表达式的新手,而不是编码员。我在 OKTA SSO 应用程序中使用了一个组过滤器,该应用程序使用正则表达式进行过滤。以下过滤器适用于没有完整规范路径的组,但它找不到规范名称格式的组。我只想在路径后搜索组名。
- 示例:“(?i)^aws_\S+_(?{{role}}[\w-]+)_(?{{accountid}}\d+)$”
- 会发现这个:“AWS_Alias_AdministratorAccess_000000”
- 但它不会找到这个:“llc.domainname.loc/IT/Security Groups/AWS_Alias_AdministratorAccess_12345678”