gpt4 book ai didi

clojure - Clojure/ClojureScript 中不区分大小写的过滤器

转载 作者:行者123 更新时间:2023-12-02 11:25:09 25 4
gpt4 key购买 nike

我有这个功能:

(defn list-data [alist filter-text]
(filter (fn [x] (if (nil? filter-text) true
(> (.indexOf x filter-text) -1))) alist))

(list-data ["Lion" "Zebra" "Buffalo" "Antelope"] "a")
;=> ("Zebra" "Buffalo")

是否有更惯用的方法来编写此函数并尊重我不想要区分大小写的过滤器的事实,这意味着我想要 (list-data ["Lion" "Zebra" "Buffalo" "Antelope"] "a")返回以下内容:
;=> ("Zebra" "Buffalo" "Antelope")

谢谢!

(这需要在 .cljs 文件中工作)

最佳答案

在 Clojure 本身中,您通常会使用正则表达式来执行此操作。在 Java 正则表达式中,您可以通过为要进行的匹配提供不区分大小写的标志,或在全局不区分大小写的正则表达式的开头提供标志来实现此目的:

  (filter #(re-find #"(?i)a" %)
["Lion" "Zebra" "Buffalo" "Antelope"])

纯 Javascript 正则表达式仅支持全局标志。它们作为字符串作为正则表达式构造函数的第二个参数给出:
  (filter #(re-find (js/RegExp. "a" "i") %)
["Lion" "Zebra" "Buffalo" "Antelope"])

但是,为了方便并保持 Java 和 Javascript 之间的正则表达式相似,Clojurescript 阅读器将全局 Java 样式标志(那些位于正则表达式开头的标志)转换为它们的 Javascript 全局等效标志。

所以第一个例子也适用于 Clojurescript。请注意,非全局标志在 Clojurescript 中不起作用,而它们在 Clojure 中起作用。

关于clojure - Clojure/ClojureScript 中不区分大小写的过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23186490/

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