如何在JavaScript中使用正则表达式来捕获两个特定字符之间的文本

How do I use regex in JavaScript to capture the text between two particular characters?

本文关键字:两个 文本 之间 字符 JavaScript 正则表达式      更新时间:2023-09-26

在下面的例子中,我试图捕获两个星号之间的文本。

var str="The *rain in SPAIN* stays mainly in the plain"; 
var patt1=/'*...'*/;
console.log(str.match(patt1));

我试着以为例

http://www.regular-expressions.info/examples.html

''问。。。''E从字面上匹配''Q和''E之间的字符,抑制特殊字符的含义。

但我在跟随时遇到了问题

尝试

var str="The *rain in SPAIN* stays mainly in the plain"; 
var patt1=/'*.*'*/;
console.log(str.match(patt1));

'*表示字面上的"*"字符。那么.表示任意字符,*表示任意次数,所以.*表示"任意字符数"。


可选奖金:

上面的代码应该可以正常工作,但您会注意到它匹配得很好。因此,对于输入abcd*efgh*ijkl*mnop,输出将是*efgh*ijkl*,而您可能更喜欢非贪婪匹配*efgh*

为此,请使用

var patt1=/'*.*?'*/;

?运算符表示非贪婪性,并确保吃掉可能到达下一个'*的最少字符数,而在没有?的情况下,吃掉最多可能到达下个'*的字符数。

要了解更多信息,我建议http://www.regular-expressions.info/repeat.html。特别是阅读"懒惰而不是贪婪"部分。

使用.*()捕获组:

var str = "The *rain in SPAIN* stays mainly* in the plain"; 
var patt1 = /'*(.*)'*/;
console.log(str.match(patt1));

结果:

["*rain in SPAIN* in the plain*", "rain in SPAIN* in the plain"]

如果您使用:

var patt1=/'*([^*]+)'*/;

结果将是:

["*rain in SPAIN*", "rain in SPAIN"]

为什么是三个点?...

var str="The *rain in SPAIN* stays mainly in the plain"; 
var patt1=/'*.*'*/;
console.log(str.match(patt1));

我不确定你在哪里看到。。。在示例中。一是任意字符的单个实例(通配符。所以,在你的例子中,你需要做的是。。。

var patt1=/'*.*?'*/;

然而,作为结果的一部分,你会得到双方的*。

您正在搜索实际的*

那么你正在搜索任意数量的。(通配符)。。。任何数字,因为*也意味着你找到的数量

但是?意味着如果你遇到下一件事,你应该停止

在你的情况下,这又是一个垃圾。

所以。。。翻译

ASTERISK(任何多次发生的事情,直到另一次发生为止)ASTERISK