javascript - 用 Regex 替换方法 - 意外的输出日志记录匹配 $& 和 Group $1

标签 javascript regex replace match

我有一个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 。这允许您使用 anchor ^$ 来匹配每个匹配中的整行,如下所示:

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

关于javascript - 用 Regex 替换方法 - 意外的输出日志记录匹配 $& 和 Group $1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43261213/

相关文章:

javascript - 使用 Vue 数据绑定(bind)表达 switch 语句的正确方法

javascript - 如何使用 JavaScript 更改 div 类名的一部分

python - 将一列中的值替换为另一列中的某些值,忽略任何 'nan' 条目

javascript - 仅 Chrome 错误 : XMLHttpRequest cannot load file URL No 'Access-Control-Allow-Origin' header is present on the requested resource

javascript - 在多个值的对象数组中搜索

java - yyyy-mm-dd 的正则表达式日期验证

javascript - 使用 javascript/jQuery 在整个网页中替换字符(空格)

java - 分析算法 最佳、最差和平均情况

javascript - 如何将 "glue"元素调整大小的图像?

Java 和 .Net 正则表达式