0

我从网站(通过 find() 方法)得到这个字符串:

uniwersalneszaryliniewypukłaMaximum VIIIwinylowa na flizelinie53cm x 1000cmodporna na działanie światła

我需要删除所有字母,并用点替换“x”。

我通过以下方式删除字母:temp2 = temp2.replace(/[^0-9]/gi, ''); 但我不知道如何将“ x”更改为点。你能帮助我吗?

预期输出:53.1000

4

4 回答 4

3

首先替换“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”也会变成一个点)

于 2013-06-18T22:40:53.777 回答
2

考虑两个步骤:

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)

于 2013-06-18T22:40:06.493 回答
0

您可以使用替换,但您需要先进行替换,因为删除所有字符也会删除 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,然后在完成并去除前导点和尾随点后返回。

于 2013-06-18T22:42:22.253 回答
0

虽然您已经接受了答案,但实现目标的另一种方法如下:

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'

JS 小提琴演示

还有一种更新的方法,它允许在字符之前和之后替换空白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);

JS 小提琴演示

上面的解释(后面的代码片段):

  • /\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,并且之前和之后的字符都是空格,我们返回一个.字符。
    • 否则我们返回一个空字符串。

参考:

于 2013-06-18T22:58:32.607 回答