Javascript将“x”替换为点并删除所有字母

时间:2013-06-18 22:36:01

标签: javascript replace find

我从网站(通过find()方法获得)此字符串:

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

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

我删除了以下字母:temp2 = temp2.replace(/[^0-9]/gi, ''); 但我不知道,我怎么能改变“x”到点。你能救我吗?

预期输出:53.1000

4 个答案:

答案 0 :(得分: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”周围的空格(否则“最大值”中的“x”也会变成点)

答案 1 :(得分: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为最大值)

答案 2 :(得分:0)

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

答案 3 :(得分: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 Fiddle demo

一种更新的方法,允许在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 Fiddle demo

上述说明(后面的代码片段):

  • /\D/匹配所有非数字字符(所有 0-9);
  • g - g'全球',匹配每个事件,而不仅仅是第一个;
  • 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,并且之前和之后的字符都是空格,则返回.个字符。
    • 否则我们返回一个空字符串。

参考文献: