删除以textarea开头的单词

时间:2014-12-24 09:43:42

标签: jquery

我有这个:

<textarea id="abc">
<img alt="the_alt_tag" src="the_source" />
</textarea>

我想删除alt标记。因为它只是textarea中的“文本”,并且因为我事先并不知道标签的内容,所以我在考虑搜索以

开头的单词
alt=" 

结尾
" 

然后将其删除。 有没有办法在textarea中搜索开头和结尾的单词?

1 个答案:

答案 0 :(得分:1)

您可以使用三个正则表达式:

var content = document.getElementById("abc").value;
content = content.replace(/\balt\s*=\s*"[^"]*" ?/gi, '')
                 .replace(/\balt\s*=\s*'[^']*' ?/gi, '')
                 .replace(/\balt\s*=\s*[^ '"=<>`]* ?/gi, '');

其中三个的原因是属性值可以是双引号或单引号,也可以不是引号。当不在引号中时,内容比引号中的内容更受限制,因此上面的字符类差异;详情in the spec

所有三个都是相同的一般形式,让我们详细看第一个:

  • \b - 表示“字边界”
  • alt - 单词alt,字面意思
  • \s* - 零个或多个空格字符(\s =空格字符,* =前面的零个或多个字符数)
  • = - 等号,字面意思
  • \s* - 再次出现零个或多个空白字符
  • " - 双引号,字面意思
  • [^"] - “否定字符类”,表示“"以外的任何字符”。通常,字符类是允许的字符列表,因此[abc]表示可以有abc;但否定一个(以^开头)意味着您列出了不允许的字符。所以在这种情况下,我们说的是“除"之外的任何东西”。在第三个正则表达式中,我们通过说[^ '"=<>`]来限制性更强 - 除了空格,撇号,双引号,等号,左或右尖括号或重音(反引号)之外的任何东西
  • * - 之前的零件或更多 - 所以,零个或多个字符与上面的否定字符类匹配
  • " - 文字"
  • ? - 最后的可选空格。

所有三个正则表达式最后都有两个标志,g表示“全局”(更改所有出现次数),i表示“case Insensitive”(忽略字母大写)。 / p>

更多信息:https://regex101.com/r/oP0dO4/1

document.querySelector("input[type=button]").onclick = function() {
  var content = document.getElementById("abc").value;
  content = content.replace(/\balt\s*=\s*"[^"]*" ?/g, '')
                   .replace(/\balt\s*=\s*'[^']*' ?/g, '')
                   .replace(/\balt\s*=\s*[^ '"=<>`]* ?/g, '');
  document.getElementById("abc").value = content;
};
<textarea id="abc" cols="50">
<img alt="the_alt_tag" src="the_source" />
</textarea>
<div><input type="button" value="Replace"></div>