在下面的示例中,我尝试捕获两个星号之间的文本。
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之间的字符,字面意思, 抑制特殊字符的含义。
但是我在跟随
时遇到了麻烦答案 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