【问题标题】:Javascript -- get only the variable part of a regex matchJavascript——仅获取正则表达式匹配的可变部分
【发布时间】:2020-11-19 01:16:19
【问题描述】:

给定:

var regexp = new RegExp("<~~include(.*?)~~>", "g");

在 javascript 中将变量分配给 .* 匹配的任何内容的最简单方法是什么?

我可以这样做,但是有点丑:

myString.match(regexp).replace("<~~include", "").replace("~~>", "");

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    Javascript 应该在正则表达式匹配时返回一个数组对象,其中数组的零索引是匹配的整个字符串,以下索引是捕获组。在你的情况下是这样的:

    var myVar = regexp.exec(myString)[1];

    应将(.*?) 捕获组的值分配给myVar。

    【讨论】:

    • 如果没有匹配,这不会抛出错误吗?如果没有匹配,则返回 null,因此尝试访问 null 对象的数组索引会引发错误。
    【解决方案2】:

    (来自MDC的引用)

    在正则表达式模式中包含括号会导致相应的子匹配被记住。例如,/a(b)c/ 匹配字符 'abc' 并记住 'b'。

    由于.*? 是第一个(也是唯一一个)记住的匹配项,请在替换字符串中使用$1:

    var foo = myString.replace(regexp, '$1');
    

    编辑:根据您的评论,您也可以(也许有更明确的意图)这样做:

    var foo = regexp.exec(myString)[1];
    

    【讨论】:

    • 谢谢熊。问题是,我实际上并不想替换整个东西,我只想找出 .* 的值是多少?是。
    • Nick 刚刚评论(然后删除了他的评论)第一个版本也可以使用。他是对的,但我猜replace 版本的意图不如exec 版本的意图那么清楚。无论哪种情况,您都必须将replace/exec 返回的值分配给另一个变量。
    【解决方案3】:

    您可以对这个正则表达式的一部分使用前瞻。见这里:

    Regular expression for extracting a number

    和/或这里:

    http://www.regular-expressions.info/lookaround.html

    【讨论】:

    • 环视不是答案。这应该有什么帮助?
    • [quote] 谢谢熊。问题是,我实际上并不想替换整个东西,我只想找出 .* 的值是多少?是。 – morgancodes 15 分钟前
    • 所以他们可以编写一个正则表达式,Edit 匹配 并排除他们不想要的信息。
    猜你喜欢
    • 2013-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-09-03
    • 2011-06-13
    • 1970-01-01
    • 2012-03-24
    • 2020-07-29
    相关资源
    最近更新 更多