超速飛
2017-05-25 16:14
'a1a2a3a6a4a5'.replace(/\w(?=\d)/g ,'X')按照老师的思路可以得出来的是"X1X2X3X6X4X5"。
为什么 'a1a2a3a6a4a5'.replace(/(?=\d)\w/g,'X') 得出来的是 "aXaXaXaXaXaX" ?如何去理解?
我暂时只能理解为 /(?=\d)\w/g'X' 与 /\w(?!\d)/g,'X' 是一样的
首先正则表达式的前瞻表达是正向前瞻:exp(?=assert)或负向前瞻:exp(?!assert);正则表达式必须在前面,没有(?=\d)\w/g这种表达方式,至于能输出结果是因为浏览器会自动把前瞻表达式的格式向后移动,纠正成正确的表达式\d(?=\w)/g;所以'a1a2a3a6a4a5'.replace(/\w(?=\d)/g ,'X')==='a1a2a3a6a4a5'.replace(/\d(?=\w)/g ,'X'),至于等于'a1a2a3a6a4a5'.replace(/\w(?!\d)/g,'X' )是碰巧;不信可以试下下面的例子:
'ab1ab2ab3ab6ab4ab5'.replace(/\w\w(?=\d)/g ,'X')
"X1X2X3X6X4X5"
移动前面错误的写法就是:
'ab1ab2ab3ab6ab4ab5'.replace(/(?=\d)\w\w/g ,'X')
"abXbXbXbXbXb5"
浏览器自动纠正为:
'ab1ab2ab3ab6ab4ab5'.replace(/\d\w(?=\w)/g ,'X')
"abXbXbXbXbXb5"
与你想的和负向前瞻相等是错误的:
'ab1ab2ab3ab6ab4ab5'.replace(/\w\w(?!\d)/g ,'X')
"aXaXaXaXaXaX"
自己思考下。
正则表达式必须在前面,没有(?=\d)\w/g这种表达方式,至于能输出结果是因为浏览器会自动把前瞻表达式的格式向后移动,纠正成正确的表达式\d(?=\w)/g; 这样理解也有问题啊
'a1a2a3a6a4a5'.replace(/(?=\d)\w/g,'X')的结果是"aXaXaXaXaXaX"
'a1a2a3a6a4a5'.replace(/\d(?=\w)/g,'X')的结果是"aXaXaXaXaXa5"
两次的结果是不一致的。
JavaScript正则表达式
96814 学习 · 119 问题
相似问题