gpt4 book ai didi

javascript - Javascript 中的部分正则表达式匹配

转载 作者:行者123 更新时间:2023-11-29 22:17:53 26 4
gpt4 key购买 nike

我生成了一个很长的正则表达式来匹配像这样的 URL

/^\/([^\/.?]+)(?:\/([^\/.?]+)(?:\/([^\/.?]+)(?:\.([^\/.?]+))?)?)?$/

将匹配:

/foo/bar/1.html

作为 ['foo', 'bar', '1', 'html']

在 Javascript 中,我希望在用户键入 url 时获取匹配的部分(如提前输入)。例如,如果他们输入:

/foo

它会告诉我 /foo 已匹配,但整个正则表达式都没有得到满足。 Ruby 可以返回一个仅包含匹配的部分元素的数组,例如:['foo', nil, nil, nil] 这可能吗,或者在 Javascript 中很容易做到?

最佳答案

@minitech 基本上给出了一半的答案:在每个组之后使用 ?,然后即使它们丢失,您也可以匹配正则表达式。一旦你可以做到这一点,那么只需检查正则表达式结果的组,看看哪些位已经匹配,哪些没有。

例如:

/^\/([^\/.?]+)?(?:\/([^\/.?]+)?(?:\/([^\/.?]+)?(?:\.([^\/.?]+))?)?)?$/.exec('/ab/c')

会返回:

["/ab:c", "ab:c", "c", undefined, undefined]

通过检查并查看返回的第四个值是否未定义,您可以找出哪些 block 已输入/未输入。

作为旁注,如果您要像这样使用大量正则表达式,您很容易失去理智,只是试图跟踪哪个组是哪个组。出于这个原因,我强烈建议使用“命名组”正则表达式。如果您使用 XRegxp 库 (http://xregexp.com/),这些是您可以创建的普通正则表达式,如下所示:

var result = XRegExp.exec('/ab/c', /^\/(?<fooPart>[^\/.?]+)?(?<barPart>?:\/([^\/.?]+)?(?:\/([^\/.?]+)?(?:\.([^\/.?]+))?)?)?$/)
var fooPart = result.fooPart

该库还有其他方便的功能,例如可以类似地帮助控制正则表达式的注释。如果您只使用这个正则表达式,它可能有点矫枉过正,但如果您正在做大量的 JS 正则表达式工作,我就不能充分推荐该库。

关于javascript - Javascript 中的部分正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14047651/

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