javascript - JS/RegEx 删除方括号内分组的字符

标签 javascript regex

我希望我能在这里解释清楚,这不是一个太具体的问题。

我正在处理一些需要获取字符串的 javascript,在方括号之间查找字符实例,存储任何返回的结果,然后将它们从原始字符串中删除。

到目前为止我的代码如下:

parseLine : function(raw)
{
    var arr = [];

    var regex = /\[(.*?)]/g;
    var arr;
    while((arr = regex.exec(raw)) !== null)
    {
        console.log("  ", arr);
        arr.push(arr[1]);
        raw = raw.replace(/\[(.*?)]/, "");
        console.log("    ", raw);
    }

    return {results:arr, text:raw};
}

这似乎在大多数情况下都有效。如果我传入字符串 [id1]It [someChar]found [a#]an [id2]excellent [aa]match 然后它返回方括号内的所有字符和原始字符串括号内的组已删除。

当我使用字符串 [id1]It [someChar]found [a#]a [aa]match 时出现问题。

当括号组后面只有一个字母(和空格?)并开始丢失组时,它似乎会失败,正如您在日志中看到的那样,如果您尝试一下。如果我像 [a][b] 这样背靠背地使用组,它也会吓坏我需要做的。

我猜这是我的 RegEx - 从这里的各种帖子中乞求和借用,因为我对此一无所知 - 但我没有运气修复它,如果有人可以提供帮助,我可以使用一些帮助。修复会很棒,但更重要的是,对幕后实际发生的事情进行解释会很棒。

在此先感谢大家。

最佳答案

您可以使用带有函数的替换方法来简化代码并只运行一次正则表达式:

function parseLine(raw) {
  var results = [];
  var parsed = raw.replace(/\[(.*?)\]/g, function(match,capture) {
    results.push(capture);
    return '';
  });
  return { results : results, text : parsed };
}

关于javascript - JS/RegEx 删除方括号内分组的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683217/

相关文章:

javascript - 正则表达式模式重复

javascript - 为什么我必须删除一些 JS 引用才能让 JQueryUI 工作

javascript - php 脚本上没有显示 JSON 数据

javascript - 如何在具有多个表单的页面上使用自动保存的局部 View ?

javascript - Fullpage.js 部分内的可滚动 div 不起作用

regex - 使用 sed 查找和替换变量中的特定字符

javascript - 是否可以为 React 的类模型打开 React.js 自动绑定(bind)

regex - 使用查找实用程序匹配多个文件名的模式

java - 由点分隔的两部分字符串的正则表达式

iphone - 如何进行向后搜索以找到第二个空格/空白并将其替换为另一个字符串?