正则表达式 - 替换除 URL/URI 内的单词

2023-12-26

为 Web 应用程序编写全球化模块,我需要一个正则表达式来用另一个单词(翻译)替换一个单词的所有实例 - 除了在 URL/URI 中找到的单词。

编辑:我忘了提及我正在使用 Ruby,所以我不能使用“Lookbehind”


  • 根据 URI 正则表达式进行拆分;在结果中包含 URI。
  • For each piece:
    • 如果是 URI,则不用管它
    • 否则,进行单词替换
  • 连接各个部分

Code:

# From RFC 3986 Appendix B, with these modifications:
#   o Spaces disallowed
#   o All groups non-matching, except for added outermost group
#   o Not anchored
#   o Scheme required
#   o Authority required
URI_REGEX = %r"((?:(?:[^ :/?#]+):)(?://(?:[^ /?#]*))(?:[^ ?#]*)(?:\?(?:[^ #]*))?(?:#(?:[^ ]*))?)"

def replace_except_uris(text, old, new)
  text.split(URI_REGEX).collect do |s|
    if s =~ URI_REGEX
      s
    else
      s.gsub(old, new)
    end
  end.join
end

text = <<END
stack http://www.stackoverflow.com stack
stack http://www.somewhere.come/stack?stack=stack#stack stack
END

puts replace_except_uris(text, /stack/, 'LINKED-LIST')

# => LINKED-LIST http://www.stackoverflow.com LINKED-LIST
# => LINKED-LIST http://www.somewhere.come/stack?stack=stack#stack LINKED-LIST
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式 - 替换除 URL/URI 内的单词 的相关文章

随机推荐

  • 为什么构建执行器状态显示一个管道作业有两个作业?

    我正在使用 groovy 管道脚本来进行构建作业 所以在 jenkins 管道中就像是 node git url myurl git load mydir myfile groovy 其工作效果符合预期 但在构建执行器状态下 它显示为两个正
  • Facebook 表示有效 URL 不是有效 URL

    尝试将应用程序域添加到新应用程序 事情是域名是http the me http the me Facebook 不认为这是有效的 URL 有什么解决办法吗 你包括吗http 在那里 不应该有那个 只需使用the me作为您的域名 我刚刚尝试
  • 创建一个正常运行的 Response 对象

    出于测试目的 我尝试在 python 中创建一个 Response 对象 但事实证明它比听起来更难 我试过这个 from requests models import Response the response Response the r
  • Ant每次都会重建库项目

    我有一个 Android 项目 其中包含两个 Android 库项目 我正在使用命令ant debug构建该项目大约需要 1 分 20 秒 我算了一下 编译第一个android库项目用了17秒 编译第二个android库项目用了42秒 由于
  • 数据网格显示一个新行,但不显示任何后续行

    我有一个数据网格 其中一列显示组合框 目前 新行显示在现有行下方 正如预期的那样
  • 如何使用 EssentialAction

    我有一个自定义正文解析器 可将请求正文流式传输到 Amazon S3 实例 并且我想在上传文件之前进行验证 在请求的标头中 我可以访问内容大小和用户的身份验证令牌 通过这两件事 我可以验证用户是否有权上传文件 阅读 Play 的文档后 似乎
  • 获取请求客户端的 IP 地址(Soap 消息)

    我构建了一个 ASMX 服务 并在代码中处理来自 ELMAH 的错误日志 我将所有字段添加到数据库中 然后添加更多字段 其中之一是所请求客户端的 IP 地址 但我无法 请阅读 不知道如何 得到 我已经习惯了 string ipAddress
  • Java,不支持的类版本错误。我怎样才能解决这个问题

    我在 eclipse 中做作业 它没有报告任何错误 甚至没有警告 当我尝试从终端编译它时 出现以下错误 它在 eclipse 中运行和编译都很好 我认为这与java版本有关 无论如何要修复它或尝试绕过它 vedran vedran debi
  • 为什么不能在批处理 for 循环中使用问号?

    Preface 在编写单独的代码时 我遇到了 for 循环中问号的问题 如下所示 for循环中没有访问到问号 批处理文件 echo off for x in the quick brown fox do echo x Output the
  • 当邮件程序没有这样定义时,如何调用邮件程序上的类方法?

    在 Rails 中发送邮件时 通常会这样做 UserMailer password reset user deliver 但如果我们向内看UserMailer我们可以看到这个 def password reset user not self
  • 如何在我的 Xcode 项目中查看整个 SCM 历史记录?

    如果我查看项目信息中的 SCM 选项卡 我只会看到影响项目文件的提交 我在哪里可以获得整个项目的所有提交的列表 Xcode 4 转到 Organizer 右上角 Repositories 选择存储库 就在那里
  • 如何使用 Flink SQL 按事件时间对流进行排序

    我有一个故障DataStream
  • 如何在 angular-cli 项目中使用全局 scss 文件

    我是 Angular 4 和 Angular CLI 的新手 我找不到任何解决方案如何在整个应用程序中使用 root scss css 文件 因此 我的问题是 如何在项目中使用全局scss文件 创建一个styles文件夹中的src文件夹 然
  • 移动设备的 X/Y 触摸坐标

    我正在创建一个网络应用程序 我希望它可以在移动设备上使用 该应用程序的初始机制需要鼠标当前的 X Y 坐标 这不需要单击和拖动 只需在浏览器窗口周围移动鼠标即可 现在我一直在研究有关触摸和手势的各种 jQuery Javascript 库
  • Apache Pig:本地模式下使用简单 GROUP BY 时出现 OutOfMemory 异常

    当我尝试在一个微小的 3KB 随机生成的示例数据集上执行一个非常简单的 GROUP BY 时 我收到了 Pig 的 OutOfMemory 异常 小猪脚本 cat example pig raw LOAD example data USIN
  • Glassfish - 来自同一客户端的同时连接

    我正在构建一个必须处理来自一个客户端的最多 300 个请求的应用程序 我已尝试此链接上建议的所有配置 Glassfish 线程池 接受器线程 HTTP 最大连接数 https stackoverflow com questions 3309
  • 使用 JMeter 发送带有二进制正文的 HTTP 请求

    我正在尝试使用 JMeter 发送带有二进制内容的 HTTP 请求 在文档中 我发现我可以发送带有二进制内容的文件 我认为这对于我的需求来说不是一个好的解决方案 因为每个请求都有自己的二进制内容 下面是我用 Perl 编写的客户端示例 演示
  • 如何制作一个简单的密码页面[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 小心 英语不好 我正在尝试创建一个页面 其中只有一个 小块 您可以在其中键入我设置的密码 如果您输入正确的密码并按 输入站点 按钮 您
  • GITLAB CI 管道未触发

    我已经为 GitLab CI CD 编写了这个 yml 文件 有一个已配置并正在运行的共享运行器 我是第一次这样做 不确定我哪里出错了 我正在进行的 Angular JS 项目 存储库上有一个 gulp 构建文件 并且在本地计算机上完美运行
  • 正则表达式 - 替换除 URL/URI 内的单词

    为 Web 应用程序编写全球化模块 我需要一个正则表达式来用另一个单词 翻译 替换一个单词的所有实例 除了在 URL URI 中找到的单词 编辑 我忘了提及我正在使用 Ruby 所以我不能使用 Lookbehind 根据 URI 正则表达式