- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 RegEx 来搜索一个长字符串,但我在想出一个表达式时遇到了问题。我正在尝试通过一些 HTML 搜索一组标签,这些标签以包含特定值的标签开始,以包含另一个值的不同标签结束。我目前用于尝试此操作的代码如下:
matcher = new RegExp(".*(<[^>]+" + startText + "((?!" + endText + ").)*" + endText + ")", 'g');
data.replace(matcher, "$1");
中间的奇怪之处(((\\?\\!endText).)*
)是从另一个线程借来的,发现here ,这似乎描述了我的问题。我面临的问题是表达式匹配开始标记,但它没有找到结束标记,而是包含数据的其余部分。此外,中间的环视使表情放慢了很多。关于如何使它正常工作有什么建议吗?
编辑:我知道在 RegEx 中解析 HTML 不是最好的选择(让我觉得很脏),但我时间紧迫,我能想到的任何其他选择都可以花太长时间。很难说我将要解析的标记到底是什么样子,因为我正在动态创建它。我能做的最好的事情就是说我正在查看一个大型数据表,该数据表是在一系列日期范围内为一系列项目收集的。这两个范围都可能不同,我试图从一行中选择特定范围的日期。 startText
的近似值和 endText
是 \\@\\@ASSET_ID\\@\\@_<YYYY_MM_DD>
.这个想法是找到对应于该单元格范围的代码。 (这种编辑很可能会使它变得更加困惑,但我不确定在不解释整个应用程序的情况下我还能提供多少信息)。
编辑好吧,这是一个愚蠢的问题。显然,我只是忘了添加 .*
在最后一个 parent 之后。不敢相信我花了这么长时间!感谢那些试图提供帮助的人!
最佳答案
首先,为什么会有一个.*
一开始点星号?如果您有如下文字:
This is my Text
如果你想把“我的文本”拉出来,你就可以my\sText
.您不必执行 .*
.
话虽这么说,因为您现在要匹配的只是您所需要的,所以您不需要围绕“一切”的主要捕获组。这个:.*(xxx)
是一个巨大的禁忌,几乎总是可以用这个代替:xxx
.换句话说,您的正则表达式可以替换为:
<[^>]+xxx((?!zzz).)*zzz
从那里我检查它在做什么。
<
.你消费它。<table border=2>
,那么到目前为止你至少消耗了 <t
,如果不是更多的话。table
,你永远找不到它,因为你已经消耗了 t
.所以替换那个 +
用*
.?
使其变得懒惰.该逻辑的结果:
<[^>]*xxx((?!zzz).)*?zzz
如果您无论如何都要使用点,这对新的正则表达式编写者来说没问题,但不建议经验丰富的人使用,我会这样做:
<[^>]*xxx.*?zzz
因此对于 Javascript,您的代码会说:
matcher = new RegExp("<[^>]*" + startText + ".*?" + endText, 'gi');
我把 IgnoreCase“i”放在那里是为了更好的测量,但你可能想要也可能不想要它。
关于JavaScript + RegEx 复杂化——搜索不包含子字符串的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18197255/
要使此代码按预期运行,请使用您的 cmd/终端而不是 IDE。(否则你将看不到\r 的正确效果) 当终端中的 9 在 4 个空格后到达最右边的位置时,它将转身并向后移动 4 个空格,然后继续。然而,当
我想显示一个多色复杂功能图标,类似于默认计时器应用程序图标: 这是我用多色显示图标的代码: CLKComplicationTemplateModularSmallStackImage* templat
我想显示一个多色复杂功能图标,类似于默认计时器应用程序图标: 这是我用多色显示图标的代码: CLKComplicationTemplateModularSmallStackImage* templat
我正在尝试使用 RegEx 来搜索一个长字符串,但我在想出一个表达式时遇到了问题。我正在尝试通过一些 HTML 搜索一组标签,这些标签以包含特定值的标签开始,以包含另一个值的不同标签结束。我目前用于尝
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 关闭 4 年前。 这个问题似乎不是关于 a specific programming problem,
我是一名优秀的程序员,十分优秀!