gpt4 book ai didi

regex - 如何在 ClojureScript 中获取正则表达式匹配的位置?

转载 作者:行者123 更新时间:2023-12-04 23:02:54 26 4
gpt4 key购买 nike

在 Clojure 中,我可以使用以下解决方案:Compact Clojure code for regular expression matches and their position in string ,即创建 re-matcher并从中提取信息,但重新匹配器似乎没有在 ClojureScript 中实现。在 ClojureScript 中完成同样事情的好方法是什么?

编辑:

我最终编写了一个补充函数,以保留正则表达式的修饰符,因为它被吸收到 re-pos 中。 :

(defn regex-modifiers
"Returns the modifiers of a regex, concatenated as a string."
[re]
(str (if (.-multiline re) "m")
(if (.-ignoreCase re) "i")))

(defn re-pos
"Returns a vector of vectors, each subvector containing in order:
the position of the match, the matched string, and any groups
extracted from the match."
[re s]
(let [re (js/RegExp. (.-source re) (str "g" (regex-modifiers re)))]
(loop [res []]
(if-let [m (.exec re s)]
(recur (conj res (vec (cons (.-index m) m))))
res))))

最佳答案

您可以使用 .exec JS的方法RegExp目的。返回的匹配对象包含一个 index与字符串中匹配项的索引相对应的属性。

当前 clojurescript 不支持使用 g 构造正则表达式文字模式标志(见 CLJS-150 ),所以你需要使用 RegExp构造函数。这是 re-pos 的 clojurescript 实现链接页面的功能:

(defn re-pos [re s]
(let [re (js/RegExp. (.-source re) "g")]
(loop [res {}]
(if-let [m (.exec re s)]
(recur (assoc res (.-index m) (first m)))
res))))

cljs.user> (re-pos "\\w+" "The quick brown fox")
{0 "The", 4 "quick", 10 "brown", 16 "fox"}
cljs.user> (re-pos "[0-9]+" "3a1b2c1d")
{0 "3", 2 "1", 4 "2", 6 "1"}

关于regex - 如何在 ClojureScript 中获取正则表达式匹配的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18735665/

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