我有一个正则表达式,谁能解释一下它的作用?
正则表达式
b=b.replace(/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/g,"$1 ")
我认为它正在替换为空格('')
如果我是对的,我想用逗号(,)而不是空格('')替换它。
我有一个正则表达式,谁能解释一下它的作用?
正则表达式
b=b.replace(/(\d{1,3}(?=(?:\d\d\d)+(?!\d)))/g,"$1 ")
我认为它正在替换为空格('')
如果我是对的,我想用逗号(,)而不是空格('')替换它。
为了解释正则表达式,让我们分解一下:
( # Match and capture in group number 1:
\d{1,3} # one to three digits (as many as possible),
(?= # but only if it's possible to match the following afterwards:
(?: # A (non-capturing) group containing
\d\d\d # exactly three digits
)+ # once or more (so, three/six/nine/twelve/... digits)
(?!\d) # but only if there are no further digits ahead.
) # End of (?=...) lookahead assertion
) # End of capturing group
$&
实际上,如果您使用而不是$1
替换字符串($&
包含整个匹配项),则不需要外括号。
不要试图通过使用正则表达式来解决所有问题。
正则表达式用于匹配,而不是修复非文本编码为文本的格式。
如果您想以不同的方式格式化数字,请提取它们并使用格式字符串在字符处理级别重新格式化它们。那只是一个丑陋的黑客。
可以使用正则表达式来查找文本中的数字,例如,\d{4,}
但是尝试使用正则表达式进行实际格式化是一种疯狂的滥用。
正则表达式(\d{1,3}(?=(?:\d\d\d)+(?!\d)))
匹配任何 1-3 位数字 ( (\d{1,3}
),后跟 3 位数字的倍数 ( (?:\d\d\d)+
),后面没有另一个数字 ( (?!\d)
)。它用"$1 "
. $1
被第一个捕获组替换。它背后的空间是……一个空间。
有关不同语法的更多信息,请参阅mdn 上的正则表达式。
如果您想用逗号而不是空格分隔数字,则需要将其替换为"$1,"
。