如何根据某些分隔符解析 html 字符串?
How to parse an html string based on certain delimiters?
#202020#<font face="Helvetica">this is string entered by a # user #202021# </font><b style=""><font face="Helvetica Neue" style="">#<u>001</u>10# </font></b>
预期结果:
#202020#<font face="Helvetica">this is string entered by a # user #202021# </font><b style=""><font face="Helvetica Neue" style="">#00110#<u></u> </font></b>
给定一个像上面这样的 html 字符串,我希望能够重新排列由 '#' 分隔的字符以及它们之间包含的 5 位数字。
现在我一直在尝试使用正则表达式去除 html 然后根据 '#' 拆分,但它不起作用,因为可能有一个 '#' 不是我的“#”降价的一部分。我也不知道如何重新组合字符串块、hmtl 标签和“#”数字块的拆分数组。我是否去除或移出字符串“#12345#”部分的样式并不重要,只要这些字符已分组,因此它们可以任意移动或环绕哈希降价。
上面的原因是我有一个所见即所得的组件,它需要存储这个 '#12345#' 格式的降价,在服务器上它根据查找转换为 url table。保存时我希望能够格式化“#”降价。我使用的所见即所得编辑器是 react-summernote。
您可以使用 string.replace
、正则表达式和回调来执行此操作。
正则表达式
/#([^#]*\d)#/g
寻找两个 #
封闭的数字和任何不是 #
.
的东西
在回调中,您删除所有非数字字符,并计算剩余的数字。如果有五个数字,你 return 包含在 #
中的数字,否则,你什么都不做,你只是 return 原始标签。
您还可以使用积极的前瞻和后视来不捕获 #
,在这种情况下,您不需要在替换标签时包含哈希值
/(?<=#)([^#]*\d)(?=#)/g
const func = str => str.replace(/(?<=#)([^#]*\d)(?=#)/g, (a, tag) => {
const numbers = tag.replace(/\D/g, ''); // remove non-digits
if (numbers.length === 5) {
return numbers; // return the numbers part of the tag
}
return tag; // return tag untouched
});
console.log(func('#12<b>345</b>6#'));
console.log(func('#1<b>2</b>34#'));
console.log(func('#12345#'));
console.log(func('#1<b>234</b>5#'));
#202020#<font face="Helvetica">this is string entered by a # user #202021# </font><b style=""><font face="Helvetica Neue" style="">#<u>001</u>10# </font></b>
预期结果:
#202020#<font face="Helvetica">this is string entered by a # user #202021# </font><b style=""><font face="Helvetica Neue" style="">#00110#<u></u> </font></b>
给定一个像上面这样的 html 字符串,我希望能够重新排列由 '#' 分隔的字符以及它们之间包含的 5 位数字。
现在我一直在尝试使用正则表达式去除 html 然后根据 '#' 拆分,但它不起作用,因为可能有一个 '#' 不是我的“#”降价的一部分。我也不知道如何重新组合字符串块、hmtl 标签和“#”数字块的拆分数组。我是否去除或移出字符串“#12345#”部分的样式并不重要,只要这些字符已分组,因此它们可以任意移动或环绕哈希降价。
上面的原因是我有一个所见即所得的组件,它需要存储这个 '#12345#' 格式的降价,在服务器上它根据查找转换为 url table。保存时我希望能够格式化“#”降价。我使用的所见即所得编辑器是 react-summernote。
您可以使用 string.replace
、正则表达式和回调来执行此操作。
正则表达式
/#([^#]*\d)#/g
寻找两个 #
封闭的数字和任何不是 #
.
在回调中,您删除所有非数字字符,并计算剩余的数字。如果有五个数字,你 return 包含在 #
中的数字,否则,你什么都不做,你只是 return 原始标签。
您还可以使用积极的前瞻和后视来不捕获 #
,在这种情况下,您不需要在替换标签时包含哈希值
/(?<=#)([^#]*\d)(?=#)/g
const func = str => str.replace(/(?<=#)([^#]*\d)(?=#)/g, (a, tag) => {
const numbers = tag.replace(/\D/g, ''); // remove non-digits
if (numbers.length === 5) {
return numbers; // return the numbers part of the tag
}
return tag; // return tag untouched
});
console.log(func('#12<b>345</b>6#'));
console.log(func('#1<b>2</b>34#'));
console.log(func('#12345#'));
console.log(func('#1<b>234</b>5#'));