我正在尝试从Markdown中的API获取部分,因此我正在使用以下方法:
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container',
defaultSeriesType: 'pie'
},
legend: {
enabled: true
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4] ,
showInLegend: true
}]
});
// Apply events to text elements (SVG) and spans within the legend (VML + modern browsers with useHTML option).
$('.highcharts-legend text, .highcharts-legend span').each(function(index, element) {
$(element).hover(function() {
chart.tooltip.refresh(chart.series[0].data[index]);
},function() {
chart.tooltip.hide();
})
});
https://regex101.com/r/r8aiVk/1
此处的结果应该是(?<=\*\*(Test)\*\*)(.*?)(?=\*\*end\*\*)
,然后是Test
。很棒。
这很好用,但是某些标题的末尾有一个星号,这就是我遇到的问题。我用一个正则表达式遍历标题,但我想捕获一个可选的星号。
因此,在下面的示例中,我希望能够捕获星号以及其余的星号:
https://regex101.com/r/r8aiVk/2
此处的结果应为this is a test
Test*
。
我尝试了各种不同的方式,例如this is a test
和其他一些变体,但是我无法正常工作。
答案 0 :(得分:1)
JavaScript中的lookbehind实现欺骗了您:为了匹配lookbehind模式,正则表达式迭代器向后移动,并尝试以这种方式匹配其模式。由于它是在每个位置执行的(您的后面是正则表达式中的第一个原子),因此它将检查字符串的开头,然后依次检查*
,**
,然后T
,等等。一旦与**Test**
匹配,就将其称为一天。因此,下一个*
与.*?
一起使用。
您可以使用简单的消费模式来获得所需的东西:
/\*\*(Test\*?)\*\*(.*?)\*\*end\*\*/g
请参见regex demo。
此模式将正常处理,从左到右,匹配
\*\*
-一个**
子字符串(Test\*?)
-将Test
或Test*
捕获到第1组\*\*
-一个**
子字符串(.*?)
-捕获组2:除换行符以外的任何0+个字符,并且尽可能少\*\*end\*\*
-**end**
子字符串。