> null r.exec("a ") >> -6ren">
gpt4 book ai didi

javascript - 将 native 正则表达式转换为带有变量的 RegExp 对象时出错

转载 作者:行者123 更新时间:2023-12-03 09:26:13 24 4
gpt4 key购买 nike

我有一个脚本,它将正则表达式模式作为变量,然后测试它以查看它是否匹配

如果我运行

var r = /[^(^$|\s+)]+/
r.exec(" ")
>> null
r.exec("a ")
>> ["a "]

但是当我运行时

var r = new RegExp("[^(^$|\s+)]+")
r.exec(" ")
>> [" "]
r.exec("a ")
>> ["a "]

在不改变预期行为的情况下,我无法将 native 语法转换为对象 RegExp。我的一次尝试是输出相反的结果,当第一个正则表达式为空时,第二个正则表达式是匹配的数组,反之亦然

@编辑据我所知,如果我使用 match 而不是 exec 也会发生同样的情况

@编辑

预期结果是:匹配任何非空字符串 https://regex101.com/r/qD0bO3/1

有什么想法吗?

最佳答案

您需要否定的前瞻 (?!...) 而不是否定的字符类 [^...] (这是一个字符类,因此仅匹配单个字符):

/^(?!\s*$).*/m

^ 将搜索锚定到行的开头,我们检查该行是否为空,或者仅包含带有负向前瞻的空格 (?!\s *$)。当向前查找成功时(未找到模式),.* 用于消耗到行尾的所有字符。前瞻不会提前匹配的位置,因此我们需要在末尾使用 .* 来使用实际文本。

末尾的 m 标志使 ^$ 匹配行的开头和结尾,而不是默认行为匹配整个字符串的开头和结尾。

或者,这里是纯正则表达式方法:

/^\s*\S.*/m

我们将确保该行至少有一个非空白字符,并匹配该行的其余部分。

关于javascript - 将 native 正则表达式转换为带有变量的 RegExp 对象时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31657798/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com