javascript正则表达式匹配两个字符串之间的所有内容(没有换行符)[重复]

Posted

技术标签:

【中文标题】javascript正则表达式匹配两个字符串之间的所有内容(没有换行符)[重复]【英文标题】:javascript regex to match everything between two strings (without newline) [duplicate] 【发布时间】:2021-05-12 17:25:00 【问题描述】:

我正在尝试匹配两个标签之间的所有文本(包括特殊字符和标记标签),但是,当同一行上有两个匹配项时,正则表达式认为是一个匹配项。

我用这个表达停止了:

(?<=<br><i>)[^<\/i>].*(?=<\/i><br>)

开始标签:

<br><i>

结束标记:

</i><br>

它适用于包含以下内容的 html

<br><i>"hello olá - ok@tchau"</i><br>  
<br><i>"another text"</i><br>

但是使用这个 html 它不起作用:

<br><i>"hello"</i><br><br><i>"ok"</i><br>

https://regex101.com/r/kHd2z2/1

【问题讨论】:

@Nick,不,我搜索了很多,这个问题和许多其他问题都不适用于我的情况 看来该问题的第二个答案正是您接受的解决方案...... @Nick,你是对的 【参考方案1】:

(?&lt;=&lt;br&gt;&lt;i&gt;)[^&lt;\/i&gt;](.*?)(?=&lt;\/i&gt;&lt;br&gt;)

具体来说,请注意(.*?),它使星号lazy rather than greedy 仅以尽可能短的方式匹配标签内的内容。

请看这里:https://regex101.com/r/QKl0uN/1

【讨论】:

【参考方案2】:

为什么你不应该使用正则表达式来解析 html/xml

一般来说,将正则表达式用于htmlxml 解析之类的东西并不是一个好主意。最好只编写一个以某种方式模拟“真实解析”的脚本(例如,您使用内置函数来解析字符串的某些部分),这在大多数情况下就足够了,或者使用“真实解析”就像遍历所有一个个字符。

正则表达式更难更改和扩展,因为它通常是一个非常具体且紧凑的用例,而且通常更难理解。

此外,正则表达式的性能很差。如果您经常使用此代码,我建议您编写一个简单的脚本来完成这项工作。 javascript 有一些 indexOflastIndexOf 方法可以帮助很多。

替代解决方案

以下内容如何:

function matchBetween(openDelimiter, closeDelimiter, input, stripArray = []) 
  const from = input.indexOf(openDelimiter);
  let result = '';
  if (from !== -1) 
    const to = input.lastIndexOf(closeDelimiter);
    if (to !== -1) 
      result = input.substring(from + openDelimiter.length, to);
      for (let i = 0; i < stripArray.length; i++) 
        result = result.replaceAll(stripArray[i], '');
      
    
  
  return result;


const examples = [
  '<br><i>"hello olá - ok@tchau"</i><br>',
  '<br><i>"another text"</i><br>',
  '<br><i>"hello"</i><br><br><i>"ok"</i><br>'
];

const openDelimiter = '<br><i>';
const closeDelimiter = '</i><br>';
const stripArray = [openDelimiter, closeDelimiter];

for (let i = 0; i < examples.length; i++) 
  console.log('#' + i, matchBetween(openDelimiter, closeDelimiter, examples[i], stripArray));

这只是一个非常简单的例子,但大多数时候这样的功能已经足够了。您还可以随时轻松扩展功能。

【讨论】:

谢谢,我开始学习正则表达式,我认为正则表达式在这种情况下很有用,真的,正则表达式不适合那个工作,我已经做了一个函数,我会再次使用它。 @danilo 是的。好吧,它适用于简单的小示例,但您不想在 (x)html 之类的上下文无关语言中使用它。最大的问题是你有大量的用例需要考虑——它们可以很容易地破坏代码——如果你想在正则表达式中捕获所有的异常和东西,你就完蛋了。 (进一步阅读:***.com/questions/590747/…,medium.com/thecyberfibre/…)

以上是关于javascript正则表达式匹配两个字符串之间的所有内容(没有换行符)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript正则表达式可重复字符串中的元素匹配

正则表达式匹配两个字符串之间的所有字符

两个字符串之间的正则表达式匹配?

使用正则表达式查找两个字符串之间的多个匹配项

两个字符串之间的正则表达式匹配,包括那些字符串

正则表达式匹配两个指定字符串之间的内容