JavaScript正则表达式,替换【&小刘】中的&而不替换【 】中的,请问怎么实现?

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)
阅读 3.1k
4 个回答

应该替换中文吧?类似的 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')

测试结果

先把&都替换掉,然后把所有的nbsp;替换成 & nbsp;

你的想法是对的,但正则写得不对,像这样 ' &小刘'.replace(/&(?!nbsp;)/g, '')

需要用前瞻否定断言
' &小刘&nb'.replace(/&(?!nbsp;)/g,'')

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题