JavaScript 分割,按最后一个点“.”分割字符串

问题描述 投票:0回答:14

目标:JS 函数在 O(n) 中根据点(从最后一个开始)分割字符串。 字符串中可能有 n 个 ,.(逗号或点)。

  1. str = '123.2345.34'
    预期输出 123.2345 和 34

  2. Str = '123,23.34.23'
    预期产量 123,23.34 和 23

javascript string
14个回答
44
投票

为了

split
仅匹配最后一个字符的字符串,如所描述的,您需要使用正则表达式“lookahead”。

这个简单的示例适用于您的情况:

var array = '123.2345.34'.split(/\.(?=[^\.]+$)/);
console.log(array);

解构赋值示例 (Ecmascript 2015)

const input = 'jquery.somePlugin.v1.6.3.js';
const [pluginName, fileExtension] = input.split(/\.(?=[^\.]+$)/);
console.log(pluginName, fileExtension);

但是,使用

slice
substring
lastIndexOf
也可以,虽然不太优雅,但速度更快:

var input = 'jquery.somePlugin.v1.6.3.js';
var period = input.lastIndexOf('.');
var pluginName = input.substring(0, period);
var fileExtension = input.substring(period + 1);
console.log(pluginName, fileExtension);


15
投票

var str = "filename.to.split.pdf"
var arr = str.split(".");      // Split the string using dot as separator
var lastVal = arr.pop();       // Get last element
var firstVal = arr.join(".");  // Re-join the remaining substrings, using dot as separator

console.log(firstVal + " and " + lastVal);  //Printing result


11
投票

我会尝试像下面这样的事情

var splitByLastDot = function(text) {
    var index = text.lastIndexOf('.');
    return [text.slice(0, index), text.slice(index + 1)]
}

console.log(splitByLastDot('123.2345.34'))
console.log(splitByLastDot('123,23.34.23'))

5
投票

我想出了这个:

var str = '123,23.34.23';
var result = str.replace(/\.([^.]+)$/, ':$1').split(':');
document.getElementById('output').innerHTML = JSON.stringify(result);
<div id="output"></div>


5
投票
let returnFileIndex = str =>
    str.split('.').pop();

1
投票

试试这个:

var str = '123.2345.34',
    arr = str.split('.'),
    output = arr.pop();
str = arr.join('.');

1
投票
var test = 'filename.....png';
var lastStr = test.lastIndexOf(".");
var str = test.substring(lastStr + 1);
console.log(str);

1
投票

我通常使用此代码,这对我来说效果很好。

Jquery:

var afterDot = value.substr(value.lastIndexOf('_') + 1);
console.log(afterDot);

Javascript:

var myString = 'asd/f/df/xc/asd/test.jpg'
var parts    = myString.split('/');
var answer   = parts[parts.length - 1];
console.log(answer);

注意:将带引号的字符串替换为您自己的需要


0
投票

我自己的版本:

var mySplit;
var str1;
var str2;
$(function(){
  mySplit = function(myString){
    var lastPoint = myString.lastIndexOf(".");
    str1 = myString.substring(0, lastPoint);
    str2 = myString.substring(lastPoint + 1);
  }
  mySplit('123,23.34.23');
  console.log(str1);
  console.log(str2);
});

工作小提琴:https://jsfiddle.net/robertrozas/no01uya0/


0
投票
Str = '123,23.34.23';

var a = Str.substring(0, Str.lastIndexOf(".")) //123,23.34 
var b = Str.substring(Str.lastIndexOf(".")) //23

0
投票

尝试这个解决方案。 简单的溢出逻辑

 <script type="text/javascript">

 var str = "123,23.34.23";
 var str_array = str.split(".");
 for (var i=0;i<str_array.length;i++)
 {
     if (i == (str_array.length-1))
     {
         alert(str_array[i]);
     }
 }
 </script>

0
投票

非常非常老的问题,但我相信它总是值得另一个答案;-)

const s = '123.2345.123456.34';

function splitString(t) {
  let a = t.split(/\./);
  return [a.slice(0, -1).join('.'), a.pop()];
}

const [first, last] = splitString(s);

console.log(`first: ${first}, last: ${last}`);


0
投票

通过使用新的

flat()
方法以及
join()
pop()
,您可以执行以下操作:

示例1

// expected output 123.2345 and 34
var str = '123.2345.34';
var result = str.split('.');
var last = result.pop();
var rest = result.flat().join('.');
console.log(rest, last);

示例2

// expected output 123,23.34 and 23
var str = '123,23.34.23';
var result = str.split('.');
var last = result.pop();
var rest = result.flat().join('.');
console.log(rest, last);


-1
投票

最简单的方法如下所述,您将得到pdf作为输出:

var str = "http://somedomain.com/dir/sd/test.pdf";
var ext = str.split('.')[str.split('.').length-1];

输出:pdf

© www.soinside.com 2019 - 2024. All rights reserved.