为什么这个正则表达式替换不适用于JavaScript,而只适用于其他引擎
Why does this regex replacement not work for JavaScript, but instead only work for other engines?
我想构建一个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浏览器控制台中使用regex替换来处理这段代码,但它不会替换任何内容。这是我尝试过的一种方法,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*/g
模式将在PHP(PCRE)和Python中正确替换,但在JavaScript中不会。
为什么?
对于PCRE实现,由于闭合方括号是字符类中的第一个元字符,因此不需要对其本身进行转义。在JavaScript中,[^]
表示一个有效的字符类。
引用自PCRE文件:
默认情况下,方括号本身并不特殊。但是,如果设置了PCRE_JAVASCRIPT_COMPAT选项,一个单独的闭合方括号会导致编译时错误。如果关闭方括号是类的成员,它应该是类中的第一个数据字符(如果present)或用反斜杠转义。
因此,你需要逃离这个角色。
/('d+)'.'s+'[[^']]+']'s*`([^`]*)`'s*/g
^^
工作演示
相关文章:
- AddEventListener适用于浏览器,但不适用于Android
- 在Firefox中使用锤子捏 错误地定向 - 适用于所有其他浏览器
- AngularJS:必需属性适用于某些字段,但不适用于其他字段
- JavaScript不显示剩余字符,但适用于其他页面
- Chrome壁纸API适用于某些图像,不适用于其他图像,没有明显的原因
- jQuery事件在Mozilla上不起作用,并且适用于其他浏览器
- 简单代码仅适用于某些编辑器,而不适用于其他任何地方
- javascript:表单不仅被IE取代,而且,它适用于所有其他浏览器
- 在backbonejs视图中,keypress/keyup/keydown事件是否仅适用于输入,而不适用于其他元素
- 滚动后删除锚链接-也适用于其他页面的链接
- jQuery.load不适用于IE(适用于所有其他浏览器)
- 点击关闭Div不适用于Chrome,但适用于所有其他浏览器
- 为什么这个正则表达式替换不适用于JavaScript,而只适用于其他引擎
- IE抛出JavaScript错误(适用于其他浏览器)
- IE无法加载JSON并尝试下载根文件!(我正在遵循一个适用于所有其他浏览器的教程)
- MDL模态按钮适用于一张卡,但不适用于其他卡
- 如何调整空格键和回车只适用于第三个按钮,不适用于任何其他按钮
- 革命滑块是完全灰色的,不工作.但也适用于其他主题
- 简单展开(JQuery)不适用于InternetExplorer11,但适用于其他浏览器
- 通过XMLHttpRequest上载文件不适用于Microsoft Edge,但适用于其他应用程序