Javascript 将字符串中的单词字符更改为下划线(第一个字符除外)的正则表达式
我试图找到一个正则表达式,它修改除第一个字符外包含下划线的字符串中的单个单词 示例:这是一个测试。=>T_____________ 我想出了:(\w)\w*/g,结果是tiat。但我不知道怎么把下划线放好 谢谢。这应该可以:Javascript 将字符串中的单词字符更改为下划线(第一个字符除外)的正则表达式,javascript,regex,Javascript,Regex,我试图找到一个正则表达式,它修改除第一个字符外包含下划线的字符串中的单个单词 示例:这是一个测试。=>T_____________ 我想出了:(\w)\w*/g,结果是tiat。但我不知道怎么把下划线放好 谢谢。这应该可以: "This is a Test".replace(/\B\w/g, "_") 说明:替换每个单词字符,除非前面有一个非单词字符。您的正则表达式,如您所说,它会对单词进行替换。要将字母替换为u,请使用带有函数参数的替换变量: var sentence = "Now is
"This is a Test".replace(/\B\w/g, "_")
说明:替换每个单词字符,除非前面有一个非单词字符。您的正则表达式,如您所说,它会对单词进行替换。要将字母替换为u,请使用带有函数参数的替换变量:
var sentence = "Now is the time for all good men";
var cached = sentence.replace (/(\w)(\w*)/g,
function (_,initial, rest) {
return initial + rest.replace (/./g, '_');
});
你可以这样做
> var s = 'This is a Test.'
> s.replace(/((?:^|\s)\w)(\w*)/g, function(x,y,z) {return y+z.replace(/./g, '_')});
'T___ i_ a T___.'
regex捕获第一个单词字符以及前面的空格或行边界的开头((?:^ |\s)\w)
捕获以下零个或多个单词字符(\w*)
- 因此,整个匹配由第一个功能参数
引用,然后第一个捕获组内的字符由x
引用,第二个捕获组内的字符由y
引用z
- 现在整个比赛被
->第一个捕获组中的字符y
- 加上
将第二个捕获组中存在的每个字符替换为z.replace(//g,'.'.''.''.'code')
符号。然后将最终结果与.
连接起来,形成最终替换字符串y
var wordMatch = /\b(\w)(\w+)/g;
input.replace(wordMatch, function ($0, $1, $2) {
return $1 + (new Array($2.length)).join('_');
});
但是,这不适用于带有重音字符的单词,因为\w
仅包括ASCII范围(a-z)和下划线,严格来说,下划线不是单词字符
更正确的版本将使用一组Unicode范围代替\w
:
var latinRanges = "\\u0041-\\u005a\\u0061-\\u007a\\u0100-\\u01bf\\u01c4-\\u024f";
wordMatch = new RegExp("(?:^|[^" + latinRanges + "])([" + latinRanges + "])([" + latinRanges + "]+)", "g");
input.replace(wordMatch, function ($0, $1, $2) {
return $1 + (new Array($2.length)).join('_');
});
范围
\u0041-\u005a
,\u0061-\u007a
,\u0100-\u01bf
和\u01c4-\u024f
包括扩展拉丁字母表中的每个字符(基本形式、重音形式、大写和小写形式)。啊,我试图做同样的事情,但我使用的是\b而不是\b。整洁的解决方案!它很有魅力,而且很小。谢谢效果很好。但更简单的是格奥尔格的解决方案