【问题标题】:How to remove get a substring after certain character that is repeated如何在重复的某个字符后删除获取子字符串
【发布时间】:2019-09-07 16:54:50
【问题描述】:

我有一个字符串:

var data = '
    6@[some data]
    8@[some other data]
    1@[more data]';

括号内的数据由数字组成。例如,4@[2019]
如何删除 6@、8@ 和 1@? 我尝试使用 split 方法,但它没有按应有的方式工作。

let result = data.split('@')[1];

但结果是

[some data]8

我希望结果是

[some data][some other data][more data]

【问题讨论】:

  • 你的意思是数据作为对象?如果是,则不是有效对象,如果是字符串,则缺少引号,因此请更新问题
  • 这样更好吗?

标签: javascript regex


【解决方案1】:

如果模式总是digit followed by @,则更新

 ^\d[^@]*@

您可以使用此模式并替换

^\d[^\[]+|\n

let str = `6@[some data]
8@[some other data]
1@[more data]
1@[some 1234]`
    
let final = str.replace(/^\d[^\[]+|\n/gm,'')
console.log(final)

【讨论】:

  • 那只是给我[[[[[[[[[[[]
  • @veronika 你告诉我你用了什么字符串输入?
  • 我投了反对票,因为您的回答对 OP 没有任何帮助。他们只是想要 [number]@removerd。
  • @veronika 是您要删除的模式始终是 digits followed by @ ?
  • @liakoyras 是的,你有一个有效的观点,如果模式总是digit followed by @,那么最好使用\d+[^@]+@
【解决方案2】:

这个正则表达式会找到前面有数字的@

/[0-9]+@/g

像这样使用它:

let str = `6@[some data]
8@[some other data]
1@[more data]`

let final = str.replace(/[0-9]+@/g,'')
console.log(final)

如果括号中没有@,这很好用。

【讨论】:

    【解决方案3】:

    正如其他人所指出的,您可以使用regular expressions 删除和/或替换文本片段。例如,正则表达式 [0-9]+@ 匹配 one or more digits followed by an @ sign,因此您可以像这样从数据中删除与该模式匹配的所有子字符串:

    var data = `
        6@[some data]
        8@[some other data]
        1@[more data]`;
    
    data = data.replace( /[0-9]+@/g, '' );
    console.log( data );

    但您可能真正想要做的是首先将您的数据解析成一个数组,例如像这样:

    var data = `
        6@[some data]
        8@[some other data]
        1@[more data]`;
    
    var array = data.split('\n').map( line => line.trim() ).filter( line => line.length > 0 );
    console.log( array );

    (上面的代码会将data 字符串拆分为一个行数组,修剪每行的前导和尾随空格,最后过滤掉任何空行。您可能需要根据实际的确切格式进行调整输入数据。)

    然后您可以更轻松地逐行处理每一行。例如,要拆分 @ 符号上的每一行并仅提取第一个 @ 之后的部分,您可以简单地执行以下操作:

    var data = `
        6@[some data]
        8@[some other data]
        1@[more data]`;
    
    var array = data.split('\n').map( line => line.trim() ).filter( line => line.length > 0 );
    
    var modified = array.map( line => line.split('@')[1] );
    console.log( modified );

    当然,您也可以在数组的每一行上使用正则表达式。例如,这将从数组中每个字符串的开头删除后跟 @ 符号的数字,但保留任何其他 @ 符号不变:

    var data = `
        6@[some data]
        8@[some other data]
        1@[more data]`;
    
    var array = data.split('\n').map( line => line.trim() ).filter( line => line.length > 0 );
    
    var modified = array.map( line => line.replace(/^[0-9]+@/, '') );
    console.log( modified );

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-15
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多