问题描述
我正在写博客并使用降价语言来呈现输入的内容。现在,我尝试过滤 HTML 标签的代码块(用三重反引号标记)之外的所有内容,并希望替换它们。
但是,我当前的 RegExp 模式无法正常工作,考虑到我是 RegExp 的新手,我找不到我的问题,这是我使用的模式:
/```(.*)```/g
这很好用,如果我想剥离每个匹配项,但是当我想拆分文本时,根据此模式,JavaScript 只是在寻找三重反引号,而不是整个模式。
编辑:
这是我的代码,我使用该模式来拆分从文本字段获得的文本:
function preformatInput(text){
let noCode = text.split(/```(.*)```/g);
let indizes = [];
let length = [];
for(let i = 0; i<noCode.length; i++){
// indizes.push(text.find(i));
if(i>0)indizes.push(text.indexOf(noCode[i],text.indexOf(noCode[i-1])));
else indizes.push(text.indexOf(noCode[i]));
length.push(noCode[i].length);
}
for(let i = 0; i<noCode.length; i++){
noCode[i] = stripHTML(noCode[i]);
}
console.log(indizes);
console.log(length);
}
解决方法
/```[^```]+```/g
不起作用,该表达式的工作方式与 /```[^`]+```/g
相同,并且禁止单/双 '`'
。
使用
/```[\s\S]*?```/g
说明
--------------------------------------------------------------------------------
``` '```'
--------------------------------------------------------------------------------
[\s\S]*? any character of: whitespace (\n,\r,\t,\f,and " "),non-whitespace (all but \n,and " ") (0 or more times
(matching the least amount possible))
--------------------------------------------------------------------------------
``` '```'
,
解决了问题:
我将 RegExp 模式更改为以下内容:/```[^```]+```/g
并且它起作用了。