【发布时间】:2021-05-25 02:58:34
【问题描述】:
我想用下划线替换字符串中除第一个单词以外的所有字符,但我的代码用下划线替换了所有字符。
预期结果:你好 ___ __ _________
var regex = /[a-z0-9,.':!?"]/gi;
var str = "Hello I'm an astronaut";
console.log(str.replace(regex, "_"));
【问题讨论】:
标签: javascript regex
我想用下划线替换字符串中除第一个单词以外的所有字符,但我的代码用下划线替换了所有字符。
预期结果:你好 ___ __ _________
var regex = /[a-z0-9,.':!?"]/gi;
var str = "Hello I'm an astronaut";
console.log(str.replace(regex, "_"));
【问题讨论】:
标签: javascript regex
我会在这里使用拆分和正则表达式方法:
var str = "Hello I'm an astronaut";
var first = str.substr(0, str.indexOf(' ')); // finds first word
var rest = str.substr(str.indexOf(' ') + 1).replace(/\S/g, "_"); // find other words
console.log(first + " " + rest);
【讨论】:
虽然可以通过使用正则表达式来实现它
var regex = /(^\S*\s*)?\S/gm;
var str = "Hello I'm an astronaut";
console.log(str.replace(regex, "$1_"));
【讨论】:
var regex = /[a-z0-9,.':!?"]/gi;
var str = "Hello I'm an astronaut";
console.log(str.substr(0,str.indexOf(' ')) +str.substr(str.indexOf(' ')).replace(regex, "_"));
【讨论】:
另一种方法是对support it 的浏览器使用后视:
(?<=^\S+\s.*)\S
(?<= 正面向后看,断言左边是
^\S+\s.* 匹配 1+ 个非空白字符,后跟字符串开头的空白字符) 近距离观察\S 匹配单个非空白字符var regex = /(?<=^\S+\s.*)\S/g;
var str = "Hello I'm an astronaut";
console.log(str.replace(regex, "_"));
或者对要保留的部分使用捕获组,并将匹配项替换为下划线:
^(\S+)|\S
^(\S+) 字符串的开头,在group 1 中捕获1+ 个非空白字符(在示例代码中用g1 表示|或者\S 匹配单个非空白字符var regex = /^(\S+)|\S/g;
var str = "Hello I'm an astronaut";
console.log(str.replace(regex, (m, g1) => g1 ? g1 : "_"));
【讨论】: