JavaScript分割,按最后一个点"."来分割字符串。

19
JavaScript分割字符串
  1. str = '123.2345.34',
    期望输出:123.2345和34

  2. Str = 123,23.34.23
    期望输出:123,23.34和23

目标:编写JS函数以O(n)的时间复杂度根据最后一个点拆分字符串。 字符串中可能有n个逗号或点。


1
你是根据什么逻辑来分割的? - Mritunjay
点号(.)(最后一次出现) - Mukesh Kumar
12个回答

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);

然而,使用slicesubstringlastIndexOf结合也可以实现相同的效果,并且虽然不太优雅,但速度更快:

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);


救命稻草!我的旧解决方案只使用了split函数,但它无法考虑文件名中的各种“.”。 - ArtFranco

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();

2
你能否为你的答案添加一些解释呢? :) - party-ring

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

1

试试这个:

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

这将会给出 "123.2345"。 - Mukesh Kumar
"123.2345" 转为 str 类型,输出为 34。 - Tushar

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);

注意:将引用的字符串替换为您自己的需求。

你意识到这里没有任何jQuery,对吧? - Manngo

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

我的版本:

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);
});

可工作的 JSFiddle:https://jsfiddle.net/robertrozas/no01uya0/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接