【问题标题】:Extracting both the full match, and the last token match in a regexp提取正则表达式中的完整匹配和最后一个标记匹配
【发布时间】:2013-06-20 19:36:49
【问题描述】:

我有一个有趣的问题。我有一个来自 Excel 的纯文本 URL,我需要将其更改为具有唯一正文的 HTML URL。这是 javascript 的正则表达式代码:

text = text.toString().replace(/=hyperlink\(([@\\\w\s\(\)-\.\/]+)\)/g, "<a href='file:///$1'>$1</a>");

这非常适合它的功能。例如,文字是:

=hyperlink("\\share\folder\log\2013\13-05-13\13-05-13.txt")

正则表达式把它变成

<a href="file:///\\share\folder\log\2013\13-05-13\13-05-13.txt">\\share\folder\log\2013\13-05-13\13-05-13.txt</a>

但是,我需要内部 HTML 只是文本文件名:

<a href="file:///\\share\folder\log\2013\13-05-13\13-05-13.txt">13-05-13.txt</a>

更复杂的是,正则表达式正在经历的原始文本不是一次出现。它是一个包含 100 行的完整电子表格。因此,正则表达式将在一次操作中匹配和替换 100 个这些字符串。

希望有可能在整个字符串的一个正则表达式中完成这一切,但我想我可以先循环遍历字符串的每一行...

如果没有办法用一个正则表达式引擎做到这一点,您认为最好的方法是什么? (没有 PHP/Python/Server 端。只有 Javascript、HTML、Jquery 等)。

【问题讨论】:

    标签: javascript jquery html regex token


    【解决方案1】:

    我猜你可以使用这个正则表达式:

    =hyperlink\("([@\\\w\s\(\)\-\.\/]+\\([^"]+))"\)
    

    还有这个新的替换:

    <a href="file:///$1">$2</a>
    

    我不确定你的正则表达式是如何工作的,但我在正则表达式中添加了引号,并在替换中用双引号替换了单引号。如果需要,请还原它们。

    Demo

    【讨论】:

    • 很棒的演示网站!!!哇,太棒了。好的,我用这个text = text.toString().replace(/=hyperlink\((.+\\)([^\\]+)\),/gi, "&lt;a href='file:///$1\$2'&gt;$2&lt;/a&gt;,"); 让正则表达式按照我想要的方式工作
    • @EricS 太棒了! :) 是的,我喜欢 regex101 而不是迄今为止我遇到的其他那些。一是因为你可以使用的东西,二是因为描述,三是因为替换:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    相关资源
    最近更新 更多