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

时间:2012-01-30 08:25:51

标签: javascript regex

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

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

  

\ Q ... \ E匹配\ Q和\ E之间的字符,字面意思,   抑制特殊字符的含义。

但是我在跟随

时遇到了麻烦

4 个答案:

答案 0 :(得分:1)

尝试

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。特别是阅读“懒惰而非贪婪”​​部分。

答案 1 :(得分:1)

使用.*()来捕获群组:

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"]

答案 2 :(得分:0)

为什么三个点? ...

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

答案 3 :(得分:0)

我不确定你在哪里看到......在这个例子中。 一个 。是任何字符的单个实例(外卡。 因此,在您的示例中,您需要做的是......

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

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

您正在搜索实际的*

然后你正在搜索任意数量的。 (外卡)......任何数字因为*也意味着你找到的数量

但是?意味着你应该在遇到下一件事时停下来

在你的情况下,再次是一个小的*。

...这样 翻译

ASTERISK(任何事情都会发生,直到另一次)ASTERISK