3 回答
TA贡献1807条经验 获得超9个赞
您没有指定您正在使用哪种正则表达式,但这适用于任何可被视为“完整”的最流行的正则表达式。
/.+?(?=abc)/
这个怎么运作
这 .+?
部分是.+
(一个或多个任何东西)的非贪婪版本 。当我们使用时.+
,引擎将基本匹配所有内容。然后,如果正则表达式中还有其他内容,它将返回尝试匹配以下部分的步骤。这是 贪婪的行为,意味着尽可能地满足。
使用时 .+?
,引擎将不是一次匹配并返回其他条件(如果有的话),引擎将逐步匹配下一个字符,直到匹配正则表达式的后续部分(如果有的话)。这是不贪婪的,意味着 尽可能少地满足。
/.+X/ ~ "abcXabcXabcX" /.+/ ~ "abcXabcXabcX" ^^^^^^^^^^^^ ^^^^^^^^^^^^ /.+?X/ ~ "abcXabcXabcX" /.+?/ ~ "abcXabcXabcX" ^^^^ ^
接下来我们有 一个 零宽度断言, 环顾四周。此分组构造与其内容匹配,但不计为匹配的字符(零宽度)。只有在匹配与否时才会返回(断言)。(?=
{contents}
)
因此,在其他方面,正则表达式/.+?(?=abc)/
意味着:
匹配任何字符尽可能少,直到找到“abc”,而不计算“abc”。
TA贡献1856条经验 获得超11个赞
如果你想捕捉到“abc”的所有内容:
/^(.*?)abc/
说明:
( )
使用捕获的括号内的访问的表达$1
,$2
等等。
^
匹配线的开始
.*
匹配任何东西,?
非贪婪(匹配所需的最小字符数) - [1]
[1]需要这样做的原因是,否则,在以下字符串中:
whatever whatever something abc something abc
默认情况下,正则表达式是贪婪的,这意味着它将尽可能匹配。因此/^.*abc/
会匹配“无论什么东西abc某事”。添加非贪婪量词?
使得正则表达式只匹配“无论什么东西”。
TA贡献1853条经验 获得超18个赞
正如@Jared Ng和@Issun指出的那样,解决这种RegEx的关键是“匹配某个单词或子串的所有内容”或“匹配某个单词或子串后的所有内容”称为“环视”零长度断言。在这里阅读更多相关信息。
在您的特定情况下,可以通过积极展望来解决。一张图片胜过千言万语。请参阅屏幕截图中的详细说明。
- 3 回答
- 0 关注
- 1579 浏览
添加回答
举报