简化现有职位。
说我有一个字符串
让someText = <h1>AJAX</h1>
<p>AJAX is not a programming language.</p>
<p>AJAX is a technique for accessing web servers from a web page.</p>
<p>AJAX stands for Asyncronous JavaScript And XML.</p>
我想使用React或javascript将其更改为
someText = "<h1>test</h1><p>desc of test</p>"
对于任何标题的目录类型的功能,可以从页面的其他位置锚定
我在前端使用反应,也可以在后端使用jquery / jsdom with express
答案 0 :(得分:1)
好的,这是我的解决方案:
let str = `<h1>topic 1</h1>
<p>desc of topic 1</p>
<h1>topic 2</h1>
<p>desc of topic 2</p>`;
const innerHTMLarr = str.match(/<h1>.*(?=<\/h1>)/g).map(x => x.substring(4));
const result = str.replace(/<h1>/g, function() {
return `<h1 id="${innerHTMLarr.shift()}">`;
});
console.log(result)
首先,我匹配正则表达式中的每个<h1>
。我添加了一个预测来匹配结束</h1>
,但实际上没有在结果中包含它。开放<h1>
无法做到同样的事情,因为JavaScript不支持后台(据我所知),因此我们必须使用substring()
手动删除它。
一旦我们为每个<h1>
代码设置了innerHTML,我们就可以通过查找正则表达式replace()
并将其替换为"<h1>"
来对整个字符串执行"<h1 id=[x]>"
,其中x
我们上面填充的数组的第一个结果。我们在此shift()
删除已使用的值。
注意:以上内容会生成无效的id
属性,因为您无法在属性值中添加spaces
。您可能希望扩展我的具体用例的答案。
答案 1 :(得分:0)
我真的不明白你在这里尝试做什么,但根据你的例子,一个简单的replace
应该可以正常工作。
let someText = "<h1>test</h1><p>desc of test</p>"
let idInfo = "id='test'"
let replaced = someText.replace("<h1>", `<h1 ${idInfo}>`)
console.log(replaced);