js下的单词替换
项⽬中碰到⼀个要替换单词的功能,需求是:可以将产品标题中的某⼀单词替换成另外的单词,如果替换词不填就替换为空。
这个需求设计到的具体细节是,前后有空格的单词,或者字符串⾸尾的单词可以被替换,举例
1、"word wordword word"  该单词中如果被替换词为word,替换词为letter 则结果是 "letter wordword letter" 也就是说中间这个单词虽然也包含了word但是不能被替换,替换的只是前后有空格的
2、"word-word word word" 该单词中如果被替换词为word,替换词为letter 则结果是 "word-word letter letter" 也就是说第⼀个单词虽然也包含了word但是不能被替换,替换的只是前后有空格的
好吧接下来就开始实现了,先定义⼀个字符串 var title = 'word hello word hello world word';
现在来分析下,既然要做替换,肯定要出被替换的词,且必须是符合规则的,这样按照正常的理解是出前后有空格,或者字符串⾸尾的单词 进⾏替换就可以了。
第⼀次写下最初的正则var newTitle = place(/(^|\s)word($|\s)/g, '$1letter$2');
这⾥为什么要在替换的新词前后加$1 $2呢?因为上⾯的正则匹配出来的包含了空格,也就是空格也会被替换掉,所以后⾯必须加上$1与$2已保证空格被恢复。
这样貌似没问题了,且针对上⾯字符串确实没问题了,但是问题来了,测试的时候发现如果改动⼀下字符串 'word word hello word hello world word',这样开始处的两个word中只有前⾯⼀个能被替换掉,第⼆个不会被替换,因为前⾯⼀个被匹配到字符串的开头,后⾯也有⼀个空格,因此可以;⽽第⼆个单词word匹配的时候会在第⼀个基础上再,然后发现前⾯没空格,也不是字符串开头,因此不能被匹配。⽽且该问题只会出现在两个相同单词相邻的情况下。没办法再另寻⽅式吧
第⼆次想想要不直接匹配单词,匹配符合条件的那个单词,⽽不是像上⾯那样的把空格也匹配进来了,结果还需在替换的时候加上$1 $2,经过考虑写下下⾯的
var newTitle = place(/(?<=^|\s)word(?=$|\s)/g, 'letter');这边意思替换前⾯是空格或字符串开头,后⾯是空格或字符串结尾的那个单词,不会匹配到空格
js 正则替换但是貌似js 不⽀持这种后瞻查,因此失败了。算了既然不⽀持后瞻,那就不⽤后瞻,保持前瞻好了
第三次写下var newTitle = place(/(^|\s)word(?=$|\s)/g, '$1letter'),OK这次总算可以了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。