gpt4 book ai didi

javascript - Lookbehind 替代方案,同时具有 lookbehind 和 lookahead

转载 作者:行者123 更新时间:2023-11-29 17:36:12 26 4
gpt4 key购买 nike

我正在寻找一个正则表达式来在 : 字符上拆分用户提供的字符串,但当用户转义冒号 \: 或者它是 url 的一部分时则不会,例如https://stackoverflow..。在 javascript 中,大多数浏览器还不支持 lookbehinds。是否可以对后视部分应用其他方法?

在 Chrome 上的 clojure/Clojurescript 中(它确实支持 lookbehinds)这个正则表达式可以解决问题:

#"(?<!\):(?!//)"

但不是在 Safari 中(例如)。

最佳答案

主要问题是当前浏览器不支持查找和否定前缀 \ 所需要的查找,因此我们不包含 \:

一个解决方法(不是很漂亮,但它有效)是首先用一些你知道不会自然出现在你的文本中的“符号”替换 \:,做你的拆分,然后替换回来任何 \:

例如,如果您的字符串中有“::”,此方法将返回一个空元素“”:

let regex = /:(?!\/\/)/

//original string literal \: has to be expressed as \\:
let str = "http://example.com::hello:dolly:12\\:00\\:PM";

//substitute out any \:
str = str.replace(/\\:/g,"<colon>"); //http://example.com::hello:dolly:12<colon>00<colon>PM

//now we split 'normally' without lookbehind
let arr = str.split(regex); //[ 'http://example.com', '', 'hello', 'dolly', '12\\:00\\:PM' ]

//substitute back \:
arr = arr.map(element => element.replace(/<colon>/g, "\\:")); //[ 'http://example.com', '', 'hello', 'dolly', '12\\:00\\:PM' ]

console.log(arr);

如果您只是在非空元素之后,您可以对其执行arr.filter(Boolean),或者使用@Skeeve 的匹配解决方案,因为它更适合此目的。

关于javascript - Lookbehind 替代方案,同时具有 lookbehind 和 lookahead,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56412475/

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