的标准方法是同时匹配了回顾后和所需的数据,并使用捕获组,做你想做什么:
例子:
# in these examples, we look for "overflow" preceded by "stack"
"stackoverflow".match(/stack(.*)/)[1] // -> overflow
"stackoverflow".replace(/(stack).*/, "$1underflow") // -> stackunderflow
"stackoverflow".replace(/(stack)(.*)/,"$2ed $1") // -> overflowed stack
,我们使用JavaScript的正则表达式的实现遇到的另一个问题是,String.prototype.match
的行为是不一致的:它通常但是如果返回一个对象类似于捕获组阵列,你的正则表达式指定g
lobal标志,它将返回一串(串)匹配,并且捕获组的细节将丢失。
要解决这个问题,你可以使用Pattern.prototype.exec
方法代替:
var pattern = /==\s*([^=]+)/g;
var input = `== Test User ==
Comment here
== Test User 2 ==
Comment here`;
while (match = pattern.exec(input)) {
console.log(match[1]);
}
不Python的溶液产生的元组'( '==', '一些值',' ==')'?你需要复制那个吗? –
@你完全正确@WiktorStribiżew,但我不需要复制这种确切的行为,只是能够检测用户名和评论。 – Masutatsu
这意味着你的初始解决方案不适合你,对吧?参见['== \ s *(。*?)\ s * == \ s *([\ s \ S] *?)(?= \ n == | $)'](https:// regex101。可以捕获这两种类型的信息。 –