javascript - 为每个字母添加跨度,但避免使用 javascript 的 html 标记
问题描述
我有一个字符串
var string = "Selected<br>Works"
从中我需要用 包裹每个字母<span></span>
,避免将<br>
标签包裹在 span 内。正则表达式可以吗?
我做到了:
'Selected<br>Works'.replace(/\S/g, '<span class="letter">$&</span>')
返回:
<span class="letter">S</span>
<span class="letter">e</span>
<span class="letter">l</span>
<span class="letter">e</span>
<span class="letter">c</span>
<span class="letter">t</span>
<span class="letter">e</span>
<span class="letter">d</span>
<span class="letter"><</span>
<span class="letter">b</span>
<span class="letter">r</span>
<span class="letter">></span>
<span class="letter">W</span>
<span class="letter">o</span>
<span class="letter">r</span>
<span class="letter">k</span>
<span class="letter">s</span>
虽然期望的结果是:
<span class="letter">S</span>
<span class="letter">e</span>
<span class="letter">l</span>
<span class="letter">e</span>
<span class="letter">c</span>
<span class="letter">t</span>
<span class="letter">e</span>
<span class="letter">d</span>
<br>
<span class="letter">W</span>
<span class="letter">o</span>
<span class="letter">r</span>
<span class="letter">k</span>
<span class="letter">s</span>
其他字符串示例是:
Art Direction<br>Creative Concept<br>UX/UI Design
Digital Branding<br>Website
解决方案
您可以使用replace
前瞻类型的正则表达式:
var string = "Selected<br>Works",
result = string.replace(/(?![^<]*>)[^<]/g, c => `<span>${c}</span>\n`);
console.log(result);
这也将跳过其他标签,例如<p>
or </canvas>
。尽管如此,它仍无法处理更复杂的 HTML(包括脚本、注释等),而正则表达式不适合这些 HTML。
推荐阅读
- mysql - Laravel / Lumen:SQLSTATE [HY000] [2054]服务器请求客户端未知的身份验证方法
- python - 在 django 中创建自定义用户模型时自动添加到数据库中的表
- react-native - 是否有一个 TS 库来格式化具有国际化和缩写的部分数字(React Native 使用)?
- python - 如何保存 Scikit 图像查看器的输出图像?
- javascript - React 表单警告:收到非布尔属性“验证”的“真”
- c++ - 更改派生类中虚函数的参数列表
- ajax - 在 MVC 中重定向操作
- reactjs - 无法在 Jenkins 中安装 Cobertura 插件
- apache-kafka - 未找到连接器 404 错误请求
- 3d - 用于预测材料反应的模拟软件