使用正则表达式 match.map 将 React <img> 插入到现有字符串中
Using regex match.map to insert React <img> into existing string
基于我之前的一个问题,我知道如何获取字符串并将其完全替换为 React 图像元素。
if (source.match(/'{([0-z,½,∞]+)'}/g)) {
tagged = source.match(/'{([0-z,½,∞]+)'}/g)
.map(function (basename, i) {
var src = './src/img/' + basename.substring(1, basename.length - 1).toLowerCase() + '.png';
return <img key={i} src={src} height='15px'/>;
});
}
以上效果很好。但是,现在我需要获取一个字符串并仅用图像元素替换其中的一部分(上面的代码不这样做;它不会保存任何周围的文本(。所以我尝试的是:
tagged = source.replace(/'{([0-z,½,∞]+)'}/g, function(basename) {
var src = './src/img/' + basename.substring(1, basename.length - 1).toLowerCase() + '.png';
return <img src={src} height='15px'/>});
(如 http://regexr.com/3cq7n 所示,除了我无法向替换部件添加功能(。问题是,tagged
是一串对象,而不是像第一个.map
代码返回的实际对象。但是,它成功地将对象嵌入到文本中,而不是破坏周围的文本。如何将两者结合起来,以便在文本中嵌入适当的<img>
元素?
编辑:尝试了这个双重替换正则表达式,但它也不起作用...
tagged = <div dangerouslySetInnerHTML={{__html: ent.encode(source).replace(/'r?'n/g, '<br/>').replace(/'{([0-z,½,∞]+)'}/g, (fullMatch, firstMatch) =>
`<img src=./src/img/${firstMatch.toLowerCase()}.png height=12px/>`
)}}></div>
好吧,React.js不会自动将节点转换为它们的HTML表示形式。不过,您可以将<img>
创建为字符串,如下所示:
tagged = source.replace(/'{([0-z,½,∞]+)'}/g, (fullMatch, firstMatch) =>
`<img src=./src/img/${firstMatch.toLowerCase()}.png height=15px />`
);
如果需要从组件返回它,则需要将其包装在 <div>
或其他元素中,如下所示:
return <div dangerouslySetInnerHTML={{__html: source.replace(/'{([0-z,½,∞]+)'}/g, (fullMatch, firstMatch) =>
`<img src=./src/img/${firstMatch.toLowerCase()}.png height=15px />`
)}}></div>
React.js 会将innerHTML
设置为创建的字符串。
请注意,这两种情况都可能造成XSS漏洞! source
可能包含<script>
或其他 HTML 元素。如果您希望解决此问题,您可以在替换其中的标记之前通过 HTML 编码器运行source
(即 tagged = htmlEncode(source).replace(…)
(。
相关文章:
- javascript时间戳插入字符串变量
- 在 JavaScript 中,将文本插入字符串的最简单方法是什么?
- 我可以在 Javascript 中的 onclick 中的“this”之后插入字符串吗?
- 在CoffeeScript中,是否存在一个'官方'在运行时而不是编译时插入字符串的方法
- 在变量索引处插入字符串
- 如何在文本输入数组中插入字符串
- 如何在Angular中插入字符串
- 使用JavaScript在另一个字符串的多个位置插入字符串
- 使用eclipse批处理脚本:在文件名中插入字符串
- 将JavaScript对象中的属性插入字符串
- 在页面上的图像后面插入字符串
- ES6从文件内容插入字符串
- 在Angular中不能在http get请求中插入字符串
- 在PHP中定义的javascript中插入字符串
- 动态插入字符串到ACE代码编辑器,angular JS
- 在元素ID中循环时插入字符串
- 在head标签内插入字符串
- 在区域中忠实地插入字符串
- 在行号 nodejs 处插入字符串
- 当用户输入时自动插入字符串