gpt4 book ai didi

javascript - 为什么这个正则表达式替换不适用于 JavaScript,而只适用于其他引擎?

转载 作者:搜寻专家 更新时间:2023-11-01 04:16:43 26 4
gpt4 key购买 nike

我想构建一个将文本转换为另一种格式的 JavaScript 函数,来自:

MATCH 1
1. [4-17] `public direct`
2. [18-29] `routing.key`
MATCH 2
1. [35-41] `direct`
2. [42-52] `routingkey`

对此:

MATCH 1: [Group 1: public direct] [Group 2: routing.key]
MATCH 2: [Group 1: direct] [Group 2: routingkey]

我一直在我的 Chrome 浏览器控制台中使用正则表达式替换这段代码,但它不会替换任何东西。这是我尝试过的一种方法,a 是测试对象,问题出在第二次替换上:

a = "MATCH 1 \n\
1. [4-17] `public direct` \n\
2. [18-29] `routing.key` \n\
MATCH 2 \n\
1. [35-41] `direct` \n\
2. [42-52] `routingkey`"

var repl = a.replace(/^(MATCH\s\d+)\s*/gm, "$1: ")
.replace(/(\d+)\.\s+\[[^]]+\]\s*`([^`]*)`\s*/g, "[Group $1: $2]")
.replace(/(?=MATCH\s\d+: )/g, "\n")

console.log(repl)

学习 regex101 演示,模式 /(\d+)\.\s+\[[^]]+\]\s*`([^`]*)`\s*/greplace properly in PHP (PCRE) and Python , 但是 not on JavaScript .

为什么?

最佳答案

对于 PCRE实现中,右方括号本身不需要转义,因为它是字符类中的第一个元字符。在 JavaScript 中,[^] 表示一个有效的字符类。

引自PCRE documentation :

A closing square bracket on its own is not special by default. However, if the PCRE_JAVASCRIPT_COMPAT option is set, a lone closing square bracket causes a compile-time error. If a closing square bracket is required as a member of the class, it should be the first data character in the class (after an initial circumflex, if present) or escaped with a backslash.

因此,你需要对这个字符进行转义。

/(\d+)\.\s+\[[^\]]+\]\s*`([^`]*)`\s*/g
^^

Working Demo

关于javascript - 为什么这个正则表达式替换不适用于 JavaScript,而只适用于其他引擎?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25950324/

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