我从网站(通过 find() 方法)得到这个字符串:
uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła
我需要删除所有字母,并用点替换“x”。
我通过以下方式删除字母:temp2 = temp2.replace(/[^0-9]/gi, '');
但我不知道如何将“ x”更改为点。你能帮助我吗?
预期输出:53.1000
我从网站(通过 find() 方法)得到这个字符串:
uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła
我需要删除所有字母,并用点替换“x”。
我通过以下方式删除字母:temp2 = temp2.replace(/[^0-9]/gi, '');
但我不知道如何将“ x”更改为点。你能帮助我吗?
预期输出:53.1000
首先替换“x”,然后更改您当前的正则表达式以忽略点:
var temp2 = "uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła";
temp2 = temp2.replace(/ x /gi, '.');
temp2 = temp2.replace(/[^0-9\.]/gi, '');
注意“x”周围的空格(否则Maximum中的“x”也会变成一个点)
考虑两个步骤:
s.replace(/[^0-9x]/gi, '') // remove everything but numbers and x
.replace(/x/gi, '.') // replace x with dot (leaving numbers)
但请注意:
uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła
-> .53.1000
(因为最大值中的 x)
您可以使用替换,但您需要先进行替换,因为删除所有字符也会删除 x。请注意,有 2 个 x,因此在您的特定情况下,您可以使用:
var string = "uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła"
console.log(string);
string = string.replace(/ x /gi,'.');
console.log(string);
string = string.replace(/[^0-9.]/gi,'');
console.log(string);
由于较早的 x 不在引号内,因此第一个替换不会更改它。另一种选择是替换所有 xs,然后在完成并去除前导点和尾随点后返回。
虽然您已经接受了答案,但实现目标的另一种方法如下:
var str = "uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła",
output = str.replace(/\D/gi, function (a, b, c) {
if (a == 'x' && c.charAt(b-1) == ' ' && c.charAt(b+1) == ' ') {
return '.';
}
return '';
})
console.log(output); // => '53.1000'
还有一种更新的方法,它允许在字符之前和之后替换空白x
字符:
var str = "uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła",
output = str.replace(/\D/g, function (a, b, c) {
if (a == 'x' && /\s/.test(c.charAt(b-1)) && /\s/.test(c.charAt(b+1))) {
return '.';
}
return '';
})
console.log(output);
上面的解释(后面的代码片段):
/\D/
匹配所有非数字字符(不是0-9 的所有字符);g
- g
'global',匹配每一个出现,而不仅仅是第一个;function (a, b, c)
:
a
- 是匹配的字符本身,b
- 是在字符串中找到该字符的索引,c
- 我们正在处理的字符串。if (a == 'x' && /\s/.test(c.charAt(b-1)) && /\s/.test(c.charAt(b+1)))
:
a == 'x'
- 测试匹配的字符是否为x
,/\s/.test()
- 测试正则表达式以查看它是否与传递给test()
方法的字符串匹配,c.charAt(b-1)
- 使用我们正在查看字符串中匹配字符之前的字符的索引。c.charAt(b+1)
- 这次查看字符串中的以下字符。x
,并且之前和之后的字符都是空格,我们返回一个.
字符。参考: