gpt4 book ai didi

Ruby 正则表达式避免匹配组

转载 作者:数据小太阳 更新时间:2023-10-29 08:56:51 26 4
gpt4 key购买 nike

我在缓冲区中运行这段代码(用于在 Ruby 中对 JS 字符串进行转义):

  elsif hex_substring =~ /^\\u[0-9a-fA-F]{1,4}/
hex_substring.scan(/^((\\u[\da-fA-F]{4}){1,})/) do |match|
hex_byte = match[0]
buffer << JSON.load(%Q("#{hex_byte}"))
hex_index += hex_byte.length
end
...

我担心 scan() 匹配得太多了:

hex_substring.scan(/^((\\u[\da-fA-F]{4}){1,})/)
# => [["\\ud83c\\udfec", "\\udfec"]]

我只使用"\\ud83c\\udfec",而不是"\\udfec"

有没有办法在 Ruby 或正则表达式中只获取第一部分?

最佳答案

您应该在此处使用单个分组构造,即匹配 1 次或多次出现的四个十六进制字符,并省略导致结果数组中出现额外项目的内部捕获组:

.scan(/^(?:\\u[\da-fA-F]{4})+/)

请注意 + {1,} 是一种更简单、更短的写法(出现一次或多次)。

详情

  • ^ - 字符串开始
  • (?: - 非捕获组的开始(它匹配的内容不会添加到最终的 scan 结果中):
    • \\u - 一个 \u子串
    • [\da-fA-F]{4} - 四个十六进制字符
  • )+ - 1 次或多次出现(组模式序列)。

关于Ruby 正则表达式避免匹配组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51850913/

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