【问题标题】:Targeting specific text between tags using regex使用正则表达式定位标签之间的特定文本
【发布时间】:2012-11-27 19:30:30
【问题描述】:

我试图只选择字符串“Target”区分大小写,而不在 HTML 代码之前或之后抓住任何额外的空间,并且不获取标签或标签属性。
我有这个正则表达式:

/(?![^<>]*>) *(Target) *([^ \d])/g

这确实会抓取多次出现的 :Target,但它还会抓取前后的额外空格、其后的第一个字符或之后的额外空格。
&lt;div id="Target"&gt;text Target othertext&lt;/div&gt; 它抓取Target o
我该如何完善它?

【问题讨论】:

  • 您不想使用正则表达式解析 HTML。使用适当的 HTML 解析器。肯定有一种适合您选择的语言。你用哪种语言写作?
  • 我目前正在用 Javascript 做这件事,我对它比较陌生。

标签: regex html-parsing


【解决方案1】:

根据您用于处理 RegEx 的内容,可能是因为您使用了多个捕获组。我会将其他捕获组更改为非捕获,方法是在它们前面加上 ?::

/(?:?![^<>]*>) *(Target) *(?:[^ \d])/g

编辑:

有了来自 cmets 的额外信息,这难道不可行吗?

var str="<div id=\"Target\">text Target othertext</div>";
str = str.replace(/Target/g,"New!");

编辑#2:

这是一个以您的原始正则表达式开头并使用来自this StackOverflow post 的一些信息的通行证:

var str="<div id=\"Target\">text Target othertext</div><Target test=\"nothing\">Target this is Targeted.</Target>";
alert(str.replace(/(?![^<>]*>)( *)Target( *[^ \d])/g,function(str,group1,group2){return group1 + "NEW!" + group2;}));

我自己测试过,它似乎可以满足您的需求……或者至少可以让您走得更远。

【讨论】:

  • 我试图应用类似的东西,但这个似乎不想捕捉任何东西。
  • 你用什么来评估正则表达式?图书馆?文本编辑器?
  • 我正在尝试用 Javascript 查找和替换 html。抱歉刚刚意识到我没有在问题中包含这个。
  • 请根据此信息和我自己的一些测试查看编辑后的答案。
  • 它确实替换了“Target”,但它也获取并替换了我试图避免的 id。如果不清楚,再次抱歉。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 2018-08-02
相关资源
最近更新 更多