【问题标题】:Search and replace a word in a specific place在特定位置搜索和替换单词
【发布时间】:2020-05-24 12:59:24
【问题描述】:

我无法解决一个问题。

有一个字符串,在某些地方有十六进制代码,代码可以很多。 我需要编写一个函数,该函数可以返回带有更改代码的字符串。 我想做什么:

function test(i,color){
	let str = "Lorem ipsum #1385ff dolor sit amet, #1385ff consectetur adipisicing #1385ff  elit. #333 Neque , est, voluptatum,#333";
	str = str.replace(str.match(/#[0-9a-f]{6}|#[0-9a-f]{3}/gi)[i],color) 
	return str
}
console.log(test(2,"#000"))

我期望得到的:

Lorem ipsum #1385ff dolor sit amet, #1385ff consectetur adipisicing #000 elit. #1385ff Neque quibusdam, est, voluptatum,#333333 aperia

我得到了什么:

Lorem ipsum #000 dolor sit amet, #1385ff consectetur adipisicing #1385ff elit. #1385ff Neque , est, voluptatum,#333333

非常感谢您的帮助:)

【问题讨论】:

  • 替换的规则是什么?
  • 字符串中的十六进制码是按一定的顺序排列的,但它们可以有完全不同的值,也可以相同。该函数必须能够更改具有特定索引的十六进制代码,该索引通过参数传递。
  • 你试过this吗?

标签: javascript regex


【解决方案1】:

您可以使用替换函数来计算要替换的位置。

function test(i,color){
	let str = "Lorem ipsum #1385ff dolor sit amet, #1385ff consectetur adipisicing #1385ff  elit. #333 Neque , est, voluptatum,#333";
  var j = 0;
	str = str.replace(/#[0-9a-f]{6}|#[0-9a-f]{3}/gi,function(x){return j++!==i? x : color}) 
	return str
}
console.log(test(2,"#000"))

另一个没有使用替换功能的版本。每次匹配模式 i 次的新 RegExp,捕获所有文本,重新插入该文本,并将 ith 匹配替换为 color

function test(i,color){
	let str = "Lorem ipsum #1385ff dolor sit amet, #1385ff consectetur adipisicing #1385ff  elit. #333 Neque , est, voluptatum,#333";
	str = str.replace(new RegExp(`((?:.*?#[0-9a-f]{6}|#[0-9a-f]{3}){${i}}.*?)(?:#[0-9a-f]{6}|#[0-9a-f]{3})`,'i'),`$1${color}`) 
	return str
}
console.log(test(2,"#000"))

【讨论】:

  • 好的,谢谢!我不在乎我是否使用了正则表达式。该功能可以满足我的需求。再次感谢您)
猜你喜欢
  • 2011-09-25
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2011-08-12
  • 2016-03-08
  • 2022-11-24
  • 2015-12-28
相关资源
最近更新 更多