ChatGPT解决这个技术问题 Extra ChatGPT

正则表达式:任何不是字母或数字的字符

我需要一个正则表达式来匹配任何不是字母或数字的字符。一旦找到,我想用空格替换它。


D
Darin Dimitrov

要匹配除字母或数字以外的任何内容,您可以尝试以下操作:

[^a-zA-Z0-9]

并替换:

var str = 'dfj,dsf7lfsd .sdklfj';
str = str.replace(/[^A-Za-z0-9]/g, ' ');

\w 用于 Word 字符,与 [a-zA-Z0-9_] 完全相同(请注意,下划线被视为单词字符。)...所以简写为 str.replace(/[^\w]/g, ' ')
但它也会包含许多 unicode 字母!有没有办法排除 unicode 字母?
要包含 unicode 字符,您可以使用 [^\p{L}0-9]
@Dave:截至 2018 年,你不能没有 polyfill,显然...... stackoverflow.com/questions/280712/javascript-unicode-regexes
有没有办法,而不是用空格替换...替换为“\”,后跟已识别的字符?像这样:把这个 dfj,dsf7lfsd .sdklfj 变成这个 dfj\,dsf7lfsd \.sdklfj?
B
Boris Verkhovskiy

此正则表达式匹配任何非字母、数字或下划线 (_) 字符。

\W

例如在 JavaScript 中:

"(,,@,£,() asdf 345345".replace(/\W/g, ' '); // Output: "          asdf 345345"

我相信他正在寻找 /(_|\W)/g,以匹配任何不是数字或字母的东西(英文)
@sbmaxx 我想替换除 &, (, ) 这些字符之外的所有字符。我怎么能在当前的正则表达式中添加这个条件。
S
Sean Kendle

您正在寻找:

var yourVar = '1324567890abc§$)%';
yourVar = yourVar.replace(/[^a-zA-Z0-9]/g, ' ');

这会将所有非字母数字字符替换为空格。

最后的“g”替换所有出现的地方。

除了指定 az(小写)和 AZ(大写),您还可以使用区分大小写的选项:/[^a-z0-9]/gi


它也会匹配空格吗?我需要保留空间。谢谢。
空格字符会匹配,但随后会被空格字符替换,因此实际上它将不理会它们(空格将保持空格)。
t
tobi-or-not

这太晚了,但是由于没有公认的答案,我想提供我认为最简单的答案: \D - 匹配所有非数字字符。

变量 x = "123 235-25%"; x.replace(/\D/g, '');

结果 x:“12323525”

请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions


Y
Youssef AbouEgla

仅匹配字母 /[AZ]/ig

匹配任何非字母 /[^AZ]/ig

仅匹配数字 /[0-9]/g 或 /\d+/g

匹配任何非数字 /[^0-9]/g 或 /\D+/g

匹配任何非数字或字母 /[^A-Z0-9]/ig

还有其他可能的模式


a
aayushi

尝试做 str.replace(/[^\w]/);它将替换字符串中的所有非字母和数字!

编辑 1:str.replace(/[^\w]/g, ' ')


一个有效的答案是 str.replace(/[^\w]/g, ' ')。如果您不包含 /g 标志,它将仅替换第一次出现。如果你没有定义一个替换字符串,这里是一个空格 ' ',它将被 undefined 替换。最后,下划线不会被替换,因为它们匹配 \w。这个答案并不完美。
R
Richie

仅供他人查看:

someString.replaceAll("([^\\p{L}\\p{N}])", " ");

将删除任何非字母和非数字 unicode 字符。

Source


我不确定这两个赞成票来自哪里,但在 JavaScript(这个问题是关于这个问题的)中没有 replaceAll,并且 \p{..} 属性转义没有得到广泛实施。
a
aloisdg

要将字母、数字或字母以外的任何内容与 é 之类的变音符号匹配,您可以尝试以下操作:

[^\wÀ-úÀ-ÿ]

并替换:

var str = 'dfj,dsf7é@lfsd .sdklfàj1';
str = str.replace(/[^\wÀ-úÀ-ÿ]/g, '_');

受到支持变音符号的顶帖的启发

source


J
Juan

您是否尝试过 str = str.replace(/\W|_/g,''); 它将返回一个没有任何字符的字符串,并且您可以指定管道栏 | 之后是否有任何特殊字符来捕获它们。

var str = "1324567890abc§$)% John Doe #$@'.replace(/\W|_/g, ''); 它将返回 str = 1324567890abcJohnDoe

或查找数字和字母并将它们替换为空字符串(“”):

var str = "1324567890abc§$)% John Doe #$@".replace(/\w|_/g, ''); 它将返回 str = '§$)% #$@';