猿问

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

我有一个字符串

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>


ABOUTYOU
浏览 163回答 3
3回答

浮云间

正则表达式\*([^\*]+)\*let str = 'text *inner text 1* text2 *inner text 2*'console.log(str.replace(/\*([^\*]+)\*/g, '<span>$1</span>'))演示https://regex101.com/r/wj9WkA/1/

心有法竹

您可以使用计数器和余数运算符,回调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 % 2它1是真实的,但2 % 2它0是虚假的,并且3 % 2是1真实的......另一种方法是使用正则表达式来搜索两个之间的匹配*,使用捕获组来捕获匹配:result&nbsp;=&nbsp;original.replace(/\*(.*?)\*/g,&nbsp;"<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);那是假设纯粹基于交替*字符工作真的没问题。

牛魔王的故事

您可以使用:str.replace(/([*])([\w&nbsp;]+)\1/g,&nbsp;'<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);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答