为了账号安全,请及时绑定邮箱和手机立即绑定

替换数字模式中的子字符串

替换数字模式中的子字符串

ABOUTYOU 2022-05-26 16:53:30
我有一个字符串text *inner text 1* text2 *inner text 2*我必须用<span></span>输出text <span>inner text 1</span> text2 <span>inner text 2</span>我试过这个replace(/[*]/g,"<span>")我知道使用 /g 将替换所有出现的事件,<span>我也不能将两个参数放入替换中,所以问题是如何替换每个偶数事件</span>
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

正则表达式


\*([^\*]+)\*

let str = 'text *inner text 1* text2 *inner text 2*'


console.log(str.replace(/\*([^\*]+)\*/g, '<span>$1</span>'))

演示

https://regex101.com/r/wj9WkA/1/


查看完整回答
反对 回复 2022-05-26
?
心有法竹

TA贡献1866条经验 获得超5个赞

您可以使用计数器和余数运算符,回调replace:


let counter = 0;

result = original.replace(/[*]/g, () => ++counter % 2 ? "<span>" : "</span>");

现场示例:

const original = "text *inner text 1* text2 *inner text 2*";

let counter = 0;

const result = original.replace(/[*]/g, () => ++counter % 2 ? "<span>" : "</span>");

console.log(result);

这是有效的,因为1 % 21是真实的,但2 % 20是虚假的,并且3 % 21真实的......

另一种方法是使用正则表达式来搜索两个之间的匹配*,使用捕获组来捕获匹配:

result = original.replace(/\*(.*?)\*/g, "<span>$1</span>");

现场示例:

const original = "text *inner text 1* text2 *inner text 2*";

let counter = 0;

const result = original.replace(/\*(.*?)\*/g, "<span>$1</span>");

console.log(result);

那是假设纯粹基于交替*字符工作真的没问题。



查看完整回答
反对 回复 2022-05-26
?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

您可以使用:

str.replace(/([*])([\w ]+)\1/g, '<span>$2</span>');

正则表达式详细信息:

  • ([*])在第 1 组中匹配*并捕获

  • ([\w ]+)匹配 1+ 个单词或空格字符并在组 #2 中捕获

  • \1用于使字符串以与*组 #1 中相同的结尾

  • 替换是<span>$2</span>将组#2中的字符串包装在<span></span>

演示:

const str = 'text *inner text 1* text2 *inner text 2*';


const res = str.replace(/([*])([\w ]+)\1/g, '<span>$2</span>');


console.log(res);


查看完整回答
反对 回复 2022-05-26
  • 3 回答
  • 0 关注
  • 162 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信