我试图匹配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.
编辑:我正在寻找匹配最后一个引号块之后的所有内容。所以我想匹配最后一次出现的“ quote]”之后的所有内容吗?Idk,如果这是最好的解决方案,但我一直在尝试。
老实说,我很喜欢Regex的东西..这就是我一直在尝试的结果。
regex = /(quote\].+)(.*)/ig; // Returns null regex = /.+((quote\]).+)$/ig // Returns null regex = /( .* (quote\]) .*)$/ig // Returns null
我制作了一个JSfiddle,供任何人在这里玩:
https://jsfiddle.net/au4bpk0e/
一种选择是将所有内容匹配到最后一个[/quote]
,然后再获取所有内容。(例)
/.*\[\/quote\](.*)$/i
这是有效的,因为.*
它本质上是贪婪的,它将与每一个匹配,直到最后一个\[\/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
你也可以避开正则表达式,并使用.lastIndexOf()
方法连同.slice()
:
更新示例
var match = '[\/quote]'; var textAfterLastQuote = str.slice(str.lastIndexOf(match) + match.length); document.getElementById('res').innerHTML = "Results: " + textAfterLastQuote;
另外,您还可以使用.split()
然后获取数组中的最后一个值:
更新示例
var textAfterLastQuote = str.split('[\/quote]').pop(); document.getElementById('res').innerHTML = "Results: " + textAfterLastQuote;