我有一个regex我打算与.replace方法一起使用,目的是从字符串中提取段落并将每个段落推入数组。

我在用getValues函数挣扎,当我将Match和Group1都登录到控制台时,得到了一些意外的结果。

这是代码wip:

var  mystring = 'Valid prater\nLorem ipsum dolor sit amet, consectetur adipiscing elit. \nProin volutpat facilisis imperdiet. \n Nunc porttito\nMorbi non eros nec arcu condimentum ultrices in ut nunc. \nMaecenas elit tellus, scelerisque ac auctor fermentum, bibendum. '

var paragraphs = [];
var obj = {};

var getValues = function(match,p1) {
  console.log('Match: ' + match );
  console.log('p1: ' + p1 );

    // obj= {};
    // obj['paragraph'] = p1;
    // paragraphs.push(obj);
 };

mystring.replace(/([^\\n][^\\]+)/g, getValues);


https://jsfiddle.net/7293mo7y/

预期产量:

Match: Valid prater
p1: Valid prater
Match: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
p1: Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Match: Proin volutpat facilisis imperdiet.
p1: Proin volutpat facilisis imperdiet.
Match: Nunc porttito
p1: Nunc porttito
Match: Morbi non eros nec arcu condimentum ultrices in ut nunc.
p1: Morbi non eros nec arcu condimentum ultrices in ut nunc.
Match: Maecenas elit tellus, scelerisque ac auctor fermentum, bibendum.
p1: Maecenas elit tellus, scelerisque ac auctor fermentum, bibendum.


我期望与this example类似的行为

实际输出:

Match: Valid prater
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Proin volutpat facilisis imperdiet.
 Nunc porttito
Morbi non eros nec arcu condimentum ultrices in ut nunc.
Maecenas elit tellus, scelerisque ac auctor fermentum, bibendum.
p1: Valid prater
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Proin volutpat facilisis imperdiet.
 Nunc porttito
Morbi non eros nec arcu condimentum ultrices in ut nunc.
Maecenas elit tellus, scelerisque ac auctor fermentum, bibendum.


谁能解释为什么在将match和p1记录到控制台时为什么我没有得到预期的输出?

为什么行为与this example不同?

需要进行哪些更改才能获得预期的输出?

谢谢!

最佳答案

您只需在正则表达式中利用MULTILINE标志或m即可。这样,您就可以使用锚点^$在每个匹配项中匹配整行,如下所示:

var  mystring = 'Valid prater\nLorem ipsum dolor sit amet, consectetur adipiscing elit. \nProin volutpat facilisis imperdiet. \n Nunc porttito\nMorbi non eros nec arcu condimentum ultrices in ut nunc. \nMaecenas elit tellus, scelerisque ac auctor fermentum, bibendum. '

var paragraphs = [];
var obj = {};

var getValues = function(match,p1) {
  console.log('Match: ' + match);
  console.log('p1: ' + p1);
 };

mystring.replace(/^(.*)$/mg, getValues);


Updated JS Fiddle

09-20 17:43