我正在寻找一种方法来从字符串中删除第四个空格(及其后面的所有内容),此函数适用于来自"输入文本区域的每个行列表"
示例:如果我有一个列表"垂直"在输入文本区域(我将在这里使用一周中的几天,例如:
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("");
}
答案 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");
}
的小提琴