Javascript Regex在最后一次出现字符串后匹配所有内容

时间:2016-01-09 20:41:50

标签: javascript regex

我试图匹配JavaScript中最后一次出现的字符串之后的所有内容(但不包括!)。

例如,搜索是:

[quote="user1"]this is the first quote[/quote]\n[quote="user2"]this is the 2nd quote and some url https://www.google.com/[/quote]\nThis is all the text I\'m wirting about myself.\n\nLook at me ma. Javascript.

编辑:我希望在最后一个报价栏之后匹配所有内容。所以我试图在最后一次出现“引用”后匹配所有内容? Idk如果这是最好的解决方案,但它是我一直在尝试的。

我会说实话,我对这个正则表达式的东西很感兴趣..这就是我一直在尝试的结果..

regex = /(quote\].+)(.*)/ig; // Returns null 
regex = /.+((quote\]).+)$/ig // Returns null  
regex = /( .* (quote\]) .*)$/ig  // Returns null   

我已经为任何人在这里玩了一个JSfiddle:

https://jsfiddle.net/au4bpk0e/

1 个答案:

答案 0 :(得分:5)

一种选择是将所有内容匹配到最后/.*\[\/quote\](.*)$/i ,然后获取任何内容。 (example)

.*

这是有效的,因为\[\/quote\]本质上是贪婪的,并且它会在最后\nThis is all the text I\'m wirting about myself.\n\nLook at me ma. Javascript. 之前匹配。

根据您提供的字符串,这将是第一个捕获组匹配:

.

但由于您的字符串包含新行,并且[\s\S]与新行不匹配,因此您可以使用.代替/[\s\S]*\[\/quote\]([\s\S]*)$/i 以匹配任何内容。

Updated Example

.slice()

您还可以避免正则表达式并使用.lastIndexOf() methodvar match = '[\/quote]'; var textAfterLastQuote = str.slice(str.lastIndexOf(match) + match.length); document.getElementById('res').innerHTML = "Results: " + textAfterLastQuote;

Updated Example

.split()

或者,您也可以使用var textAfterLastQuote = str.split('[\/quote]').pop(); document.getElementById('res').innerHTML = "Results: " + textAfterLastQuote; 然后获取数组中的最后一个值:

Updated Example

$('#Select option[value="1"]').attr("selected", "selected");