1

基本的に、あなたが言うとしたら

var string = 'he said "Hello World"';
var splitted = string.split(" ");

分割された配列は次のようになります。

'he' 'said' '"Hello World"'

基本的に、引用符で囲まれた部分を別のアイテムとして扱います

では、JavaScriptでこれをどのように行うのでしょうか?スキャナーが引用符のセット内にあるかどうかをチェックする文字列を調べるforループが必要ですか?または、もっと簡単な方法はありますか?

4

2 に答える 2

7

正規表現を使用できます。

var splitted = string.match(/(".*?")|(\S+)/g);

基本的に、最初に引用符で囲まれた文字(スペースを含む)を含む文字列を検索し、次に文字列内の残りのすべての単語を検索します。

例えば

var string = '"This is" not a string "without" "quotes in it"'; string.match(/(".*?")|(\S+)/g);

これをコンソールに返します。

[""This is"", "not", "a", "string", ""without"", ""quotes in it""]
于 2012-12-01T18:52:16.440 に答える
0

まず第一に、私はあなたがこれを意味すると思います:

var string = 'he said "Hello World"';

これで問題が解決したので、forループのアイデアは部分的に正解でした。これが私がそれをする方法です:

// initialize the variables we'll use here
var string = 'he said "Hello World"', splitted = [], quotedString = "", insideQuotes = false;

string = string.split("");

// loop through string in reverse and remove everything inside of quotes
for(var i = string.length; i >= 0; i--) {
    // if this character is a quote, then we're inside a quoted section
    if(string[i] == '"') {
        insideQuotes = true;
    }

    // if we're inside quotes, add this character to the current quoted string and
    // remove it from the total string
    if(insideQuotes) {
        if(string[i] == '"' && quotedString.length > 0) {
            insideQuotes = false;
        }

        quotedString += string[i];
        string.splice(i, 1);
    }

    // if we've just exited a quoted section, add the quoted string to the array of
    // quoted strings and set it to empty again to search for more quoted sections
    if(!insideQuotes && quotedString.length > 0) {
        splitted.push(quotedString.split("").reverse().join(""));
        quotedString = "";
    }
}

// rejoin the string and split the remaining string (everything not in quotes) on spaces
string = string.join("");
var remainingSplit = string.split(" ");

// get rid of excess spaces
for(var i = 0; i<remainingSplit.length; i++) {
    if(remainingSplit[i].length == " ") {
        remainingSplit.splice(i, 1);
    }
}

// finally, log our splitted string with everything inside quotes _not_ split
splitted = remainingSplit.concat(splitted);
console.log(splitted);​

より効率的な方法があると確信していますが、これにより、指定したものとまったく同じ出力が生成されます。これは、jsFiddleで動作するバージョンへのリンクです

于 2012-12-01T18:55:52.543 に答える