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/
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 % 2
它1
是真实的,但2 % 2
它0
是虚假的,并且3 % 2
是1
真实的......
另一种方法是使用正则表达式来搜索两个之间的匹配*
,使用捕获组来捕获匹配:
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);
那是假设纯粹基于交替*
字符工作真的没问题。
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);
添加回答
举报