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】:(?<=<br><i>)[^<\/i>](.*?)(?=<\/i><br>)
具体来说,请注意(.*?)
,它使星号lazy rather than greedy 仅以尽可能短的方式匹配标签内的内容。
请看这里:https://regex101.com/r/QKl0uN/1
【讨论】:
【参考方案2】:为什么你不应该使用正则表达式来解析 html/xml
一般来说,将正则表达式用于html
或xml
解析之类的东西并不是一个好主意。最好只编写一个以某种方式模拟“真实解析”的脚本(例如,您使用内置函数来解析字符串的某些部分),这在大多数情况下就足够了,或者使用“真实解析”就像遍历所有一个个字符。
正则表达式更难更改和扩展,因为它通常是一个非常具体且紧凑的用例,而且通常更难理解。
此外,正则表达式的性能很差。如果您经常使用此代码,我建议您编写一个简单的脚本来完成这项工作。 javascript 有一些 indexOf
和 lastIndexOf
方法可以帮助很多。
替代解决方案
以下内容如何:
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正则表达式匹配两个字符串之间的所有内容(没有换行符)[重复]的主要内容,如果未能解决你的问题,请参考以下文章