Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript中的正则表达式自定义单词边界_Javascript_Regex - Fatal编程技术网

JavaScript中的正则表达式自定义单词边界

JavaScript中的正则表达式自定义单词边界,javascript,regex,Javascript,Regex,我们有一些评估计算的JS脚本,但是我们有一个前导零的问题。JS将带前导零的数字视为八进制数。 因此,我们使用正则表达式删除所有前导零: \b0+(\d+)\b 样本数据: 102 1,03 1.03 004 05 06+07 08/09 010,10,01 00,01 0001 01*01 010,0 0,0000001 5/0 (也可在线访问) 正则表达式可以正常工作,但不能与包括“,”或“.”的数字一起工作。这被视为单词边界,零也被删除 我们找到了一个使用负lookbehinds/loo

我们有一些评估计算的JS脚本,但是我们有一个前导零的问题。JS将带前导零的数字视为八进制数。 因此,我们使用正则表达式删除所有前导零:

\b0+(\d+)\b
样本数据:

102
1,03
1.03
004
05
06+07
08/09
010,10,01
00,01
0001
01*01
010,0
0,0000001
5/0
(也可在线访问)

正则表达式可以正常工作,但不能与包括“,”或“.”的数字一起工作。这被视为单词边界,零也被删除

我们找到了一个使用负lookbehinds/lookforwards的解决方案,但JS不支持

令人痛苦的是,我们的正则表达式知识到此为止:(谷歌不喜欢我们


有谁能帮助我们吗?

如果我没有弄错您的意思,以下几点应该有用:

/(^|[^\d,.])0+(\d+)\b/
将匹配项替换为
$1$2

说明:

(#在组1中匹配并捕获:
^#字符串锚点的开头(如果字符串以0开头)
|#或
[^\d,.]#除ASCII数字、点或逗号以外的任何字符。
)#第1组结束。
0+#匹配一个或多个前导零
(\d+)#匹配号码并将其捕获到组2中
\b#匹配数字的结尾(此处可以跟一个点或逗号)

测试它。

如果我了解您的需要,这是我的解决方案:

var txt001 = "102".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt002 = "1,03".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt003 = "1.03".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt004 = "004".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt005 = "05".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt006 = "06+07".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt007 = "08/09".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt008 = "010,10,01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt009 = "00,01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt010 = "0001".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt011 = "01*01".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt012 = "010,0".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt013 = "0,0000001".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
var txt014 = "5/0".replace(/(^|\+|\-|\*|\/)0+(\d)/g, "$1$2");
和结果

102
1,03
1.03
4
5
6+7
8/9
10,10,01
0,01
1
1*1
10,0
0,0000001
5/0

你认为这对你有用吗?我已经设置了一个全局标志,并且删除了任何前导零或逗号。如果你愿意,你也可以在背景中包括一个点like@MerianosNikos这不是相同的结果?Thx用于解决方案!!