Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 替换多个';仅在bbcode标记内,不影响bbcode之外的任何其他文本_Javascript_Regex_Bbcode - Fatal编程技术网

Javascript 替换多个';仅在bbcode标记内,不影响bbcode之外的任何其他文本

Javascript 替换多个';仅在bbcode标记内,不影响bbcode之外的任何其他文本,javascript,regex,bbcode,Javascript,Regex,Bbcode,我创建了一个函数,用来替换字符串中的特殊字符。主要目的是替换BBCode标记内的那些特殊字符([code=any]我想显示的代码[/code]),但在当时,它是否替换BBCode标记外的其余字符串并不重要。但是现在我在替换BBcode标记之外的HTML标记时遇到了问题。所以我试图想出一个解决办法,但到目前为止运气不好 其目标是替换以下内容中的特殊字符: [code=any]some code inside of here[/code] 还应该提到,当我说code=any时,它可以是任何东西。它

我创建了一个函数,用来替换字符串中的特殊字符。主要目的是替换BBCode标记内的那些特殊字符([code=any]我想显示的代码[/code]),但在当时,它是否替换BBCode标记外的其余字符串并不重要。但是现在我在替换BBcode标记之外的HTML标记时遇到了问题。所以我试图想出一个解决办法,但到目前为止运气不好

其目标是替换以下内容中的特殊字符:

[code=any]some code inside of here[/code]
还应该提到,当我说code=any时,它可以是任何东西。它可以是HTML、CSS、PHP、JS[a-z-a-z-0-9]

更像

[code=[a-z-A-Z-0-9]<h1>some html insode of the bbcode to be replace</h1>[/code]
[code=[a-z-a-z-0-9]要替换的bbcode中的一些html
我当前的函数很简单。只需要一些基本的正则表达式:

replaceSpecial : function(str) {

str = str.replace(/&/g, "&amp;");
str = str.replace(/>/g, "&gt;");
str = str.replace(/</g, "&lt;");
str = str.replace(/"/g, "&quot;");
str = str.replace(/'/g, "&#039;");

return str;
}
replaceSpect:function(str){
str=str.replace(/&/g,“&;”);
str=str.replace(/>/g,“”);

str=str.replace(/是否提取条形码内的文本并应用此正则表达式, 您可以使用exec将替换应用于代码中的内容, 可以使用捕获组和反向引用 查看更多链接

在本例中,仅获取bbcode中的文本并对其进行处理

let code = "[code=any]<h1>hello and bye</h1>e[/code]";
//extract only texto inside bbcode
let match = /\[code\=any\](.+)\[\/code\]/g.exec(code)[1];
//get <h1>hello</h1>e
let replacement = myObj.replaceSpecial(match);
let code=“[code=any]您好,再见[/code]”;
//仅提取bbcode中的文本
让match=/\[code\=any\](.+)\[\/code\]/g.exec(code)[1];
//打招呼
let replacement=myObj.replacesspecial(匹配);

这只会是如果你想得到,如果你想替换你可以使用replace函数

var myObj = {
    replaceSpecial : function(str) {
        str = str.replace(/&/g, "&amp;");
        str = str.replace(/>/g, "&gt;");
        str = str.replace(/</g, "&lt;");
        str = str.replace(/"/g, "&quot;");
        str = str.replace(/'/g, "&#039;");
        return str;
    }
};
let code = "[code=any]<h1>hello and bye</h1>e[/code]";
let match = /\[code\=any\](.+)\[\/code\]/g.exec(code)[1];
let replacement = myObj.replaceSpecial(match);
let string = code.replace(/\[code\=any\](.+)\[\/code\]/,"[code=any]"+replacement+"[/code]")
var myObj={
替换特殊:函数(str){
str=str.replace(/&/g,“&;”);
str=str.replace(/>/g,“”);

str=str.replace(/如果没有嵌套的
code
标记,则可以使用

/(\[code=[^\]]*])([^]*?)(\[\/code])/gi
或者,如果您发现此正则表达式性能存在问题,请将其替换为根据以下公式编写的等效表达式:

见(和)

详细信息

  • (\[code=[^\]]*])
    -第1组:
    [code=
    然后是
    ]
    以外的任何0+字符,然后是
    ]
  • ([^]*?)
    -第2组:任何0个或更多字符,尽可能少(
    *?
    是*非贪婪量词)
  • (\[\/code])
    -第3组:
    [/code]
    子字符串
字符串中使用它#替换
,如下所示:

函数替换特殊(str){

返回str.replace(/&/g,“&;”)。replace(/>/g,“”)。replace(你可以使用我的最新问题,请考虑把我的答案标记为接受,因为它对你起作用,如果它对你有帮助的话,如果它是一个完整的函数,那么它就很好了,它在替换它之后就变成了整个值。ne完整的函数。但我确实认为这非常接近。这正是我想做的。如果我错了,请纠正我,但这只有在BBCode完全是[code=any]某个文本[/code]时才有效对吗?在这种情况下,这是行不通的。代码可以是HTML、CSS、PHP、JS,所以当我说any时,我指的是任何一个单词。你可以使用下面答案中提到的表达式,它分为三组/([code=[^]]*]([^]*?)([\/code])/giI已经根据下面答案的优化更新了我的答案
/(\[code=[^\]]*])([^]*?)(\[\/code])/gi
/(\[code=[^\]]*])([^[]*(?:\[(?!\/code])[^[]*)*)(\[\/code])/gi