繁体   English   中英

用正则表达式替换降价字符

[英]Replace markdown characters with regex

我有以下对象:

{
    "_id": "59f6f931d20f73000410bbd8",
    "title": "Test",
    "salary": "1337",
    "maxSalary": "4000",
    "minSalary": "1500",
    "introText": "Lorem __Ipsum__ Sit Dolor Amet",
    "expectText": "Lorem Ipsum Sit _Dolor__ Amet Est __Circa__."
}

在我的 Vue.js 应用程序中,我实现了vue-markdown来渲染 Markdown 以显示粗体和草书词。

我现在必须实现的是,为每个 __word __ 解析对象并将其替换为正则表达式到 word 。

到目前为止我得到了什么:

let objJson = JSON.stringify(obj);
objJson = objJson.replace(/\_/g, '');
let jobXML = JSON.parse(objJson);
res.send(jobXML);

所以这是我删除“__”字符的解决方法,但我没有找到任何其他资源来解释如何用我的 HTML 实体替换它。

我的解决方法是需要的,因为我使用/jobs来显示我的 vue 应用程序中的所有作业(可以使用降价),但我还有另一个不能使用“__”但需要 HTMl 实体的快速路由。

这是您在替换调用中需要使用的正则表达式

str.replace(/_{1,}([ a-z0-9]+)_{1,}/img, "<strong>$1</strong>")

演示:

 var str = "Lorem Ipsum Sit _Dolor__ Amet Est __Circa__."; console.log(str.replace(/_{1,}([ a-z0-9]+)_{1,}/img, "<strong>$1</strong>")); 

可能您可以尝试以下一种方法:

str.replace(/__(.*?)__((_+|\W+|$))/g, '<strong>$1</strong>$2')

我认为自己有一个可行的解决方案:

let objJson = JSON.stringify(obj);
let regexBold = /\_\_(\S(.*?\S)?)\_\_/gm;
let regexItalic = /\_(\S(.*?\S)?)\_/gm;
objJson = objJson.replace(regexBold, '<strong>$1</strong>');
objJson = objJson.replace(regexItalic, '<i>$1</i>');
let jobXML = JSON.parse(objJson);
res.send(jobXML);

看到其他/更好的方法来解决这个问题还是很高兴的!

我的终极(可能已经发现案例)正则表达式用于清理所有降价内联标记:

/(?<marks>[`]|\*{1,3}|_{1,3}|~{2})(?<inmarks>.*?)\1|\[(?<link_text>.*)\]\(.*\)/g

示例降价行:

Markdown with a `code` *test* with **striping** all _Markdown_ and [Some awesome link 123](http://test.com/a?rt&=123&test=this+open) and more `code` more __fenced 2__ and some ~~strike and more strike~~ !!!

我们可以用这个替换代码替换所有标记和链接:

line.replace(re, '$<inmarks>$<link_text>')

 var line = "Markdown with a `code` *test* with **striping** all _Markdown_ and [Some awesome link 123](http://test.com/a?rt&=123&test=this+open) and more `code` more __fenced 2__ and some ~~strike and more strike~~ !!!"; document.querySelector('h3:nth-of-type(1)+pre').textContent = line; var re = /(?<marks>[`]|\\*{1,3}|_{1,3}|~{2})(?<inmarks>.*?)\\1|\\[(?<link_text>.*)\\]\\(.*\\)/g; var fixed = line.replace(re, "$<inmarks>$<link_text>"); document.querySelector('h3:nth-of-type(2)+pre').textContent = fixed;
 pre { white-space: pre-wrap; }
 <h3>Before</h3> <pre></pre> <h3>After</h2> <pre></pre>

如果我们想让链接文本带有一些开始/结束字符,比如双引号,我们可以使用一个函数来执行替换,如下所示:

line.replace(re, (match, marks, inMarks, linkText) => {
  return linkText && `"${linkText}"` || inMarks || match;
})

 var line = "Markdown with a `code` *test* with **striping** all _Markdown_ and [Some awesome link 123](http://test.com/a?rt&=123&test=this+open) and more `code` more __fenced 2__ and some ~~strike and more strike~~ !!!"; document.querySelector('h3:nth-of-type(1)+pre').textContent = line; var re = /(?<marks>[`]|\\*{1,3}|_{1,3}|~{2})(?<inmarks>.*?)\\1|\\[(?<link_text>.*)\\]\\(.*\\)/g; var fixed = line.replace(re, (match, marks, inMarks, linkText) => { return linkText && `"${linkText}"` || inMarks || match; }); document.querySelector('h3:nth-of-type(2)+pre').textContent = fixed;
 pre { white-space: pre-wrap; }
 <h3>Before</h3> <pre></pre> <h3>After</h2> <pre></pre>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM