25

文字列があり、引用符の前に文字を抽出しようとしています。

例は14 'から14を抽出- €14.99

これを達成するために次のコードを使用しています。

$menuItem.text().match(/[^']*/)[0]

私の問題は、文字列が €0.88 のようなものである場合、空の文字列を返したいということです。しかし、0.88 ユーロの完全な文字列が返されます。

私は試合で何を間違っていますか?

4

5 に答える 5

41

これは、分割に使用する必要があるものです。

string.slice(0, string.indexOf("'"));

そして、存在しない値のエッジケースを処理するには:

function split(str) {
 var i = str.indexOf("'");

 if(i > 0)
  return  str.slice(0, i);
 else
  return "";     
}

JsFiddle のデモ

于 2012-08-25T18:34:06.287 に答える
6

OPが尋ねた各ケースをカバーする最も安全で最も明白なオプションとして私に思われるものを誰も提示していないようなので、私はこれを提供すると思いました:

function getCharsBefore(str, chr) {
    var index = str.indexOf(chr);
    if (index != -1) {
        return(str.substring(0, index));
    }
    return("");
}
于 2012-08-25T19:11:06.613 に答える
5

これを試して

str.substring(0,str.indexOf("'"));
于 2012-08-25T18:51:53.537 に答える
0

これは、coffescript のアンダースコア mixin です。

_.mixin
  substrBefore : ->
    [char, str] = arguments
    return "" unless char?
    fn = (s)-> s.substr(0,s.indexOf(char)+1)
    return fn(str) if str?
    fn

または生のjavascriptを好む場合: http://jsfiddle.net/snrobot/XsuQd/

これを使用して、次のような部分を構築できます。

var beforeQuote = _.substrBefore("'");
var hasQuote = beforeQuote("14' - €0.88"); // hasQuote = "14'"
var noQoute  = beforeQuote("14 €0.88");    // noQuote =  ""

または、文字列で直接呼び出すだけです

var beforeQuote = _.substrBefore("'", "14' - €0.88"); // beforeQuote = "14'"

私は意図的に結果に検索文字を残すことを選択して、補数 mixin と一致させましたsubstrAfter(デモはhttp://jsfiddle.net/snrobot/SEAZr/です)。後者の mixin は、URL クエリを解析するためのユーティリティとして作成されました。場合によってはlocation.search、先頭に?.

于 2013-10-23T01:04:35.943 に答える
0

私は「分割」を使用します:

let string = "one-two-three";

let um = string.split('-')[0];
let dois = string.split('-')[1];
let tres = string.split('-')[2];

document.write(tres) //3

于 2021-04-14T04:09:00.027 に答える