JavaScript正则表达式匹配最后一个字符串出现后的所有内容。

4
我将尝试在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]”之后的所有内容?我不知道这是否是最佳解决方案,但这是我一直在尝试的。

说实话,我对这个正则表达式的东西不太擅长...下面是我一直在尝试的结果...

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

我已经为大家做了一个JSfiddle,大家可以在这里尝试一下:

https://jsfiddle.net/au4bpk0e/


2
我不明白你想匹配什么。是在你的字符串中匹配最后一次出现的“什么”字符串吗? - timgeb
抱歉,你是对的,我正在尝试匹配最后一个引号之后的所有内容... - ManreeRist
1
那么为什么要使用正则表达式呢?请使用substring和lastIndexOf。 - Wiktor Stribiżew
1个回答

8
一种选择是匹配直到最后一个[/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()方法:

.lastIndexOf()方法

更新的示例

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;

1
您,先生,是一位英雄!出色的工作。非常感谢。希望用户能够在谷歌上寻找类似的内容并选择这个标题,同时也感谢您的回答。 - ManreeRist
1
#今天我学到了:".*是固有贪婪的,它将匹配每一个[match]直到最后一个\[\/quote\]" 这真是个巧妙的技巧。谢谢。 - ruffin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接