我不知道为什么re
和/^Text(\d+)?[.]json$/g
之间存在差异。
我使用了错误的表达方式吗?
$ node -v
v6.15.0
$ node
> list =[ 'Text.json',
'Text1.json',
'Text2.json',
'Text3.json',
'Text4.json' ]
> re = new RegExp(/^Text(\d+)?[.]json$/g)
> list.filter(f => re.test(f))
[ 'Text.json', 'Text2.json', 'Text4.json' ]
> list.filter(f => /^Text(\d+)?[.]json$/g.test(f))
[ 'Text.json',
'Text1.json',
'Text2.json',
'Text3.json',
'Text4.json' ]
> String(/^Text(\d+)?[.]json$/g) === String(re)
true
答案 0 :(得分:0)
这种奇怪的行为。
只需删除全局标志就可以了。
var list =[ 'Text.json',
'Text1.json',
'Text2.json',
'Text3.json',
'Text4.json' ]
var re = new RegExp(/^Text(\d+)?[.]json$/)
var filter1 = list.filter(f => re.test(f))
console.log('filter1', filter1)
var filter2 = list.filter(f => /^Text(\d+)?[.]json$/g.test(f))
console.log('filter2', filter2)
var comp = String(/^Text(\d+)?[.]json$/) === String(re)
console.log('comp', comp)
答案 1 :(得分:0)
/g
标志使相同的RegExp记住上一次成功匹配的结束位置,并且即使下一次在不同的字符串中也从该位置开始搜索。如果使用RegExp文字,则每次都会重新创建正则表达式,并且此行为没有影响。
请参阅有关MDN的注释和示例in this section。
答案 2 :(得分:0)
使用构造函数时,删除反斜杠正则表达式:
变成:re = new RegExp(/^Text(\d+)?[.]json$/g)
re = new RegExp('^Text(\d+)?[.]json$', 'g')