Javascript:仅在找到标记时剥离标记

Javascript:仅在找到标记时剥离标记,javascript,jquery,conditional-statements,Javascript,Jquery,Conditional Statements,编辑:我有一个函数,可以在标记之间包装字符串。我希望此函数仅在字符串不包含任何标记时应用 if string: "text" then "<b>text</b>"; else if string "<b>text</b>" then "text"; 如果字符串为“text”,则为“text”; 如果字符串为“text”,则为“text”; 我需要一个条件语句来检查给定的标记,并且仅当找到标记时才剥离标记 例如,函数条带标签(字符串,“sp

编辑:我有一个函数,可以在标记之间包装字符串。我希望此函数仅在字符串不包含任何标记时应用

if string: "text" then "<b>text</b>";  
else if string "<b>text</b>" then "text";
如果字符串为“text”,则为“text”;
如果字符串为“text”,则为“text”;


我需要一个条件语句来检查给定的标记,并且仅当找到标记时才剥离标记

例如,
函数条带标签(字符串,“span”)

1-搜索给定的标记(本例中为span)
2-如果找到,请取出标签检查:

来源:

function strip_tags (input, allowed) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Luke Godfrey
    // +      input by: Pul
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +      input by: Alex
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Marc Palau
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir (http://brett-zamir.me)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Eric Nagel
    // +      input by: Bobby Drake
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Tomasz Wesolowski
    // +      input by: Evertjan Garretsen
    // +    revised by: Rafał Kukawski (http://blog.kukawski.pl/)
    // *     example 1: strip_tags('<p>Kevin</p> <br /><b>van</b> <i>Zonneveld</i>', '<i><b>');
    // *     returns 1: 'Kevin <b>van</b> <i>Zonneveld</i>'
    // *     example 2: strip_tags('<p>Kevin <img src="someimage.png" onmouseover="someFunction()">van <i>Zonneveld</i></p>', '<p>');
    // *     returns 2: '<p>Kevin van Zonneveld</p>'
    // *     example 3: strip_tags("<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>", "<a>");
    // *     returns 3: '<a href='http://kevin.vanzonneveld.net'>Kevin van Zonneveld</a>'
    // *     example 4: strip_tags('1 < 5 5 > 1');
    // *     returns 4: '1 < 5 5 > 1'
    // *     example 5: strip_tags('1 <br/> 1');
    // *     returns 5: '1  1'
    // *     example 6: strip_tags('1 <br/> 1', '<br>');
    // *     returns 6: '1  1'
    // *     example 7: strip_tags('1 <br/> 1', '<br><br/>');
    // *     returns 7: '1 <br/> 1'

       allowed = (((allowed || "") + "")
          .toLowerCase()
          .match(/<[a-z][a-z0-9]*>/g) || [])
          .join(''); // making sure the allowed arg is a string containing only tags in lowercase (<a><b><c>)
       var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>/gi,
           commentsAndPhpTags = /<!--[\s\S]*?-->|<\?(?:php)?[\s\S]*?\?>/gi;
       return input.replace(commentsAndPhpTags, '').replace(tags, function($0, $1){
          return allowed.indexOf('<' + $1.toLowerCase() + '>') > -1 ? $0 : '';
       });
    }
功能条标签(输入,允许){
// http://kevin.vanzonneveld.net
//+原创者:凯文·范·佐内维尔德(http://kevin.vanzonneveld.net)
//+改进者:卢克·戈弗雷
//+输入:脉冲
//+错误修复人:凯文·范·佐内维尔德(http://kevin.vanzonneveld.net)
//+错误修复者:Onno Marsman
//+输入人:Alex
//+错误修复人:凯文·范·佐内维尔德(http://kevin.vanzonneveld.net)
//+输入人:马克·帕劳
//+改进者:凯文·范·佐内维尔德(http://kevin.vanzonneveld.net)
//+输入:Brett Zamir(http://brett-zamir.me)
//+错误修复人:凯文·范·佐内维尔德(http://kevin.vanzonneveld.net)
//+错误修复者:Eric Nagel
//+输入人:Bobby Drake
//+错误修复人:凯文·范·佐内维尔德(http://kevin.vanzonneveld.net)
//+错误修复者:托马斯兹·韦索洛夫斯基
//+输入人:Evertjan Garretsen
//+修订人:RafałKukawski(http://blog.kukawski.pl/)
//*示例1:带标签(“Kevin


van Zonneveld”,”; //*返回1:“凯文·范·佐内维尔德” //*示例2:strip_标签(“Kevin van Zonneveld

”,“”); //*返回2:“Kevin van Zonneveld

” //*示例3:strip_标签(“,”) //*示例4:带标签('1<5>1'); //*返回4:'1<5>1' //*示例5:带标签('1
1'); //*返回5:'1' //*示例6:strip_标签('1
1','
'); //*返回6:'1' //*示例7:strip_标签('1
1','

'); //*返回7:'1
1' 允许=((允许的“)+”) .toLowerCase() .match(//g)| |[]) .join(“”);//确保允许的参数是仅包含小写()标记的字符串 变量标记=/]*>/gi, commentsAndPhpTags=/|/gi; 返回输入。替换(commentsAndPhpTags.)。替换(标记,函数($0,$1){ 允许返回。indexOf(“”)>-1?$0:“”; }); }
我假设您正在寻找javascript答案。我不是jQuery的人……这利用了dom,因此浏览器的实现可能最终会更改大小写或删除它无法识别的属性

function stripTags(string) {
    if (!arguments.callee._tempNode) {
        arguments.callee._tempNode = document.createElement('div');
    }
    var node = arguments.callee._tempNode;
    node.innerHTML = string;

    var i=arguments.length;
    while (--i) { // decrement first so the string var won't be processed
        var toRemove = node.getElementsByTagName(arguments[i]);
        while (toRemove.length) {
            toRemove[0].parentNode.removeChild(toRemove[0]);
        }        
    }
    return node.innerHTML;
}
函数条带标记(字符串,标记){
var tagMatcher=newregexp(“”,'g');
返回字符串。替换(标记匹配器“”);
}
从字符串中删除任何标记,或

function toggleSurroundingTags(string, tag) {
  var tagMatcher = new RegExp('^<' + tag + '>(.*)</' + tag + '>$');
  var match = tagMatcher.exec(string);
  if (match) {
    return match[1];
  } else {
    return '<' + tag + '>' + string + '</' + tag + '>';
  }
}
函数切换环绕标记(字符串、标记){
var tagMatcher=newregexp('^(.*)$');
var match=tagMatcher.exec(字符串);
如果(匹配){
返回匹配[1];
}否则{
返回“”+字符串+“”;
}
}
要删除周围的标记(如果存在),并在不存在时添加标记,请执行以下操作:

toggleSurroundingTags('hello', 'b'); // returns '<b>hello</b>'
toggleSurroundingTags('<b>hello</b>', 'b'); // returns 'hello'
toggleSurroundingTags('hello','b');//返回'hello'
toggleSurroundingTags('hello','b');//返回'hello'

我不确定这是否是我要找的。例如,我只想在字符串包含span标记时去掉span标记。只去掉标记。如果没有,则什么也不会发生。无需强调或检查“仅在找到时”"@deceze:我只在不包含任何标记的情况下才尝试在标记之间包装字符串。我不想要这个->文本。对于像您在示例中给出的简单标记,这很容易做到,如下面的答案所示,但在现实世界的html中,如果您不控制输入,您将永远无法可靠地识别标记-例如
或者使用不同顺序的参数,等等。您也不能只假设
之间的任何内容都是标记,例如文本可以是
5<10和10>6
,请记住,此代码不考虑任何属性。
toggleSurroundingTags('hello', 'b'); // returns '<b>hello</b>'
toggleSurroundingTags('<b>hello</b>', 'b'); // returns 'hello'