删除第四个空格后的字符串的所有字符

时间:2016-02-09 02:37:30

标签: javascript regex string

我正在寻找一种方法来从字符串中删除第四个空格(及其后面的所有内容),此函数适用于来自"输入文本区域的每个行列表"

示例:如果我有一个列表"垂直"在输入文本区域(我将在这里使用一周中的几天,例如:

Monday February 8 2016 08:05:07 GMT-0700 (PDT)
Tuesday February 9 2016 09:07:07 GMT-0700 (PDT)
Wednesday February 10 2016 01:04:07 GMT-0700 (PDT)
Thursday February 11 2016 05:15:07 GMT-0700 (PDT)
etc

当我点击按钮删除时,导致输出文本区域为"垂直"像这样:

Monday February 8 2016
Tuesday February 9 2016
Wednesday February 10 2016
Thursday February 11 2016

我使用这个脚本,它的工作对第一行很好,但只是对于第一行,我想为所有行工作。请帮助我,我试图自己搜索stackoverflow但没有成功,请求修改我的脚本或告诉我我做错了什么,非常感谢你。

这是我的剧本

function remove_list() {
  var count = 0;
  var list = document.myForm.Input.value;
  list = list.replace(/^((?:[^ ]* ){3}[^ ]*) [\S\s]*/, "$1");

  var listvalues = new Array();
  var newlist = new Array();

  listvalues = list.split(/[\s,]+/).join("");

  var hash = new Object();

  for (var i = 0; i < listvalues.length; i++) {
    if (hash[listvalues[i].toLowerCase()] != 0) {
      newlist = newlist.concat(listvalues[i]);
      hash[listvalues[i].toLowerCase()] = 1
    } else {
      count++;
    }
  }
  document.myForm.Output.value = newlist.join("");

}

2 个答案:

答案 0 :(得分:2)

您的正则表达式几乎有效。

如果您希望它适用于多行,您可以使用m multi-line flag,以便锚点^ / $匹配每行的开头/结尾而不是开头/字符串的结尾。

这是您修改后的正则表达式:

/^((?:[^ ]* ){3}[^ ]*) [\S\s]*?$/gm

但是,您实际上可以将其简化为以下内容:

/^((?:\S+\s+){3}\S+).*$/gm

用法:

textarea.value.replace(/^((?:\S+\s+){3}\S+).*$/gm, '$1');

<强>解释

  • gm - 全球旗帜;多线旗帜
  • ^ - 主张断言每一行的开头
  • ((?:\S+\s+){3}\S+) - 捕获组以匹配一个或多个非空白字符,后跟一个或多个空格字符三次;然后再次匹配一个或多个非空格字符,直到第四个空格字符
  • .* - 匹配线上剩余的字符
  • $ - 主张断言每一行的结尾。

这是一个证明这一点的例子:

var textarea = document.querySelector('textarea');
var replacedValue = textarea.value.replace(/^((?:\S+\s+){3}\S+).*$/gm, '$1');

document.getElementById('output').textContent = replacedValue;
<textarea>
Monday February 8 2016 08:05:07 GMT-0700 (PDT)
Tuesday February 9 2016 09:07:07 GMT-0700 (PDT)
Wednesday February 10 2016 01:04:07 GMT-0700 (PDT)
Thursday February 11 2016 05:15:07 GMT-0700 (PDT)
</textarea>

<p>Output:</p>
<pre id="output"></pre>

答案 1 :(得分:1)

你使用正则表达式比你需要的更复杂。你真正需要做的就是将整个事物分成新行,循环遍历这些行,拆分空格,然后重新加入拼接版本。

function removeExtra() {
    var ta = document.getElementById('lines'),
    lines = ta.innerHTML,
    reformatted = [];

  lines = lines.split("\n");
  for(var i = 0; i < lines.length; i++){
    var parts = lines[i].split(" ");
    reformatted.push( parts.splice(0, 4).join(" ") );
  }

  ta.innerHTML = reformatted.join("\n");

}

https://jsfiddle.net/w7z88vjv/

的小提琴
相关问题