2015-01-21 74 views
1

我是新的正则表达式。我需要提取两个字符串模式([[tag :: & ]])以及每次出现。使用Javascript/JQuery提取两个字符串模式之间的子字符串

例如:

如果文本是:

Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus [[tag::4797897]] mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu. 
[[tag::4797800]] [[tag::4797769]] 

正如我想[[标签::],预期输出应为4797897之间的提取文本, 4797800和4797769

我正在使用Javascript和JQuery

Ca ñ一些请帮助我。在此先感谢

+1

你能显示你的代码吗? – rapvelopment 2015-01-21 02:00:26

回答

1

为了达到所期望的结果可以使用exec()方法在一个循环中,推capturing组的匹配结果的结果阵列。

var str = ' ... ' 
var re = /\[\[tag::([^\]]+)]]/g, 
matches = []; 

while (m = re.exec(str)) { 
    matches.push(m[1]); 
} 

console.log(matches) //=> [ '4797897', '4797800', '4797769' ] 
+0

完美的工作。非常感谢:) – user2975939 2015-01-21 02:38:30

+1

不客气。下一次当这样的问题被问到时,请考虑发布您尝试尝试解决问题的内容。 – hwnd 2015-01-21 02:40:50

0

使用capturing groups

\[\[tag::(.*?)]] 

得到你想要从组索引1 .*?会做的零个或多个字符的非贪婪匹配的值。 [是一个正则表达式元字符,表示字符类的开始。因此,您需要在正则表达式中转义[以匹配字面[符号。

DEMO

> var str = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus [[tag::4797897]] mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.\nLorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus [[tag::4797897]] mus. Donec quam felis, ultricies nec, pellentesque eu, pretium quis, sem. Nulla consequat massa quis enim. Donec pede justo, fringilla vel, aliquet nec, vulputate eget, arcu.\n[[tag::4797800]] [[tag::4797769]]" 
> var re = /\[\[tag::(.*?)]]/g; 
> while (m = re.exec(str)) { 
... match.push(m[1]); 
... } 
> console.log(match) 
[ '4797897', '4797800', '4797769' ] 
相关问题