regex 正则表达式将多个字符替换为一个和一些条件

mf98qq94  于 6个月前  发布在  其他
关注(0)|答案(2)|浏览(80)

输入字符串类似于:

This is new update -(!@#$%)    1.0...

字符串
我有一个字符串(标题),我需要转换,以便在未来使用它作为一个链接。
必要条件:
1.删除所有特殊字符。
1.将多个空格替换为一个空格。
1.将空格替换为下划线。
1.只留下数字之间的点。
我不确定我做的每件事都是正确的。现在我经常使用.replace()方法:

.replace(/[^a-z0-9_.\s]/gi, ' ')
.replace(/[\s\s+]/g, '_')
.replace(/[\.]/g, '.')
.replace(/[\s\s+]/g, '_')


我应该采取什么方法来实现这个结果?
目标:

this_is_new_update_1.0

zfciruhq

zfciruhq1#

用两个正则表达式替换:
1.第一个月

  1. /\s+/g
    首先用第一个捕获组替换#1,然后用_替换#2。

1匹配以下之一

  1. (\d\.\d)-一个数字,后面跟着一个小数点和另一个数字。如果匹配,则捕获。
  2. \.-句号/句号
  3. [^\s\w]-不是空格(\s)或单词字符(\w)的字符
    这被捕获组#1($1)替换,如果除第一个部分之外的任何部分匹配,则该捕获组为空。如果第一个部分匹配,则它是捕获的 digit-period-digit 组合(即,不改变任何内容)。
    之后,所有空格序列(#2 -\s+)都被替换为单个_
var s = 'This is new update. -(!@#$%)    1.0...'
document.write(s.replaceAll(/(\d\.\d)|\.|[^\s\w]/g, '$1').replace(/\s+/g,'_'));

字符串

smdncfj3

smdncfj32#

您可以将合并 14 组合。

/[^a-z0-9._\s]|\.(?!\d)/gi

字符串
然后,23

/ +/g

var s = 'This is new update -(!@#$%)    1.0...'
s = s.replaceAll(/[^a-z0-9._\s]|\.(?!\d)/gi, '')
s = s.replaceAll(/ +/g, '_')
s = s.toLowerCase()
console.log(s)

相关问题