JavaScript正则表达式,替换【&小刘】中的&而不替换【 】中的,请问怎么实现?
var regSymbol = /[&((?!nbsp).)*]/ig;
var str = ' '
var str1 = '&小刘'
var newStr = str.replace(regSymbol, '%26');
console.log(newStr)
var newStr1 = str1.replace(regSymbol, '%26');
console.log(newStr1)
这是我写的,但无法实现,请问什么原因
————————————————————
为什么改成这样
var regSymbol = /&[(?!nbsp;)]/ig;
或者var regSymbol = /[&(?!nbsp;)]/ig;
这样是无效的?
————————————————————
为什么我这么改之后
var regSymbol = /[&(?!nbsp;)]/ig;
var str = ' '
var str1 = '&小刘'
var newStr = str.replace(regSymbol, '%26');
// var newStr = str.replace(/&(?![a-z]{2,5};)(.+)/g, '$2', '%26');
console.log(newStr)
var newStr1 = str1.replace(regSymbol, '%26');
console.log(newStr1)
会得到这种结果 %26%26%26%26%26%26
————————————————————
最后实现效果
var regSymbol = /[&(?!nbsp;)]/ig;
var str = ' '
var str1 = '&小刘'
// var newStr = str.replace(regSymbol, '%26');
var newStr = str.replace(/&(?!nbsp;)/g, '$1', '%26');
console.log(newStr)
var newStr1 = str1.replace(regSymbol, '%26');
console.log(newStr1)
应该替换中文吧?类似的 html encode 还挺多的,不建议写白名单。
str.replace(/&([\u4E00-\u9FCC\u3002\uff1b\uff0c\uff1a\u201c\u201d\uff08\uff09\u3001\uff1f\u300a\u300b]+)/g, '$1')
只替换非 entity code 大约是:
str.replace(/&(?![a-z]{2,8};)(.+)/g, '$1')
测试结果