正则表达式问题 - 替换浮点数,而不是int

时间:2013-04-16 09:42:50

标签: javascript regex

我想除去这个刺痛中的所有浮动:

string = "1 south african rand is 0.11044"

我这样做:

reg = /[^\d+.\d+]/g
console.log string.replace(reg, '')

记录

10.11044

这是错误的,我只想要xxxx.xxxxx部分。 1不是浮点数,所以它不应该是它的一部分吗?

我应该如何挑战它?

7 个答案:

答案 0 :(得分:4)

试试这个

^((?!\d+\.\d+).)*

有关详细信息,请参阅此答案:Regular expression to match a line that doesn't contain a word?

答案 1 :(得分:2)

以下正则表达式应该匹配浮动(对于提供的示例):

/(-?\d*\.\d+)/

替换:

console.log (string.replace(/(-?\d*\.\d+)/, ''));

答案 2 :(得分:1)

我在正则表达式

下面使用了正面看法(?< = ..)
\.\d+(?<=\d)

使用此正则表达式并将以下值替换为''。结果将是1 23 33 3

1 23 33.2000 3.4445

希望有所帮助

答案 3 :(得分:0)

var reg = /\d+\.\d+/g
var str = "1 south african rand is 0.11044";
var onlyFloats = str.match(reg).join(" ");
console.log(onlyFloats)

答案 4 :(得分:0)

试试这个

string = "1 south african rand is 0.11044"
reg = /(\d+\.\d+)/g;
string.match(reg);

答案 5 :(得分:0)

/**
 * @param $string
 * @return string
 * 
 * output
 * a.a.a.a.a.a.   => 0.0
 * 1.1.1.1.1.1.   => 1.11111
 * 2a$2.45&.wer.4 => 22.454 
 */
function stringToFlout($string) {
    $parts = explode('.', $string);

    for ($i = 0; $i < count($parts); $i++) {
        $parts[$i] = preg_replace('/[^0-9]/', '', $parts[$i]);
    }

    $left = $parts[0];
    if (empty($left))
        $left = 0;

    $float[] = $left;

    unset($parts[0]);
    $right = implode('', $parts);
    if (empty($right))
        $right = 0;

    $float[] = $right;

    return implode('.', $float);
}

答案 6 :(得分:0)

我会使用这个正则表达式:

(0|([1-9][0-9]*))?\.(0|([1-9][0-9]*))

(0|([1-9][0-9]*))? 匹配可选的整数部分,\. 匹配点,最后的 (0|([1-9][0-9]*)) 匹配必需的小数部分。 它成功了:

  • .5
  • 0.5
  • 0.0
  • 0.1
  • 0.5foo
  • 31.41592

它失败了:

  • 00.5
  • 100
  • nice
  • 2.

锚定版本:

^(0|([1-9][0-9]*))?\.(0|([1-9][0-9]*))$