2017-09-08 9 views
2

私はforループを使用して解析している文字列を持っています。ダブルクォート/シングルクォートの開始と終了を特定したい。以下は、私は単一引用符の例を与えている引用符の開始と終了を確認します

var str = "a = 'hello \'world\''; b = 'test'"; 
var strInputArr = []; 
var singleQuote = false; 
var startIndex, endIndex; 
var tmpStr = []; 
for(var i = 0; i < str.length; i++) { 
    if(singleQuote) { 
    if(str[i] === "'") { 
     strInputArr.push(tmpStr.join('')); 
     tmpStr = []; 
     singleQuote = false; 
     endIndex = i; 
    } 
    tmpStr.push(str[i]); 
    continue; 
    } 
    if(str[i] === "'") { 
    singleQuote = true; 
    startIndex = i; 
    } 
} 
console.log(strInputArr); 

上記のコードの出力がある

[ "こんにちは"、 " '"、 "' テスト"]

が、それがあるべき

[ "こんにちは"世界"、 "テスト"]

。期待される出力を得るにはどうすればよいですか?

+2

を返しながら、文字列(または列)の最初の発生を返す 'indexOf'と' lastIndexOf'はあなたのコードが –

+0

良くanwserとしてそれを投稿@JaromandaXようになります、それは最も簡単なのです。 – Salketer

+0

いいえ、@Salketer、私はコードを書いていないので、 –

答えて

2

は、あなたがのstartIndex毎回上書きされて以来、ちょうどそれに最初の時間を書く

var str = "a = 'hello \'world\''"; 
 
var singleQuote = false, hasLoggedStartIdx = false; 
 
var startIndex, endIndex; 
 
for(var i = 0; i < str.length; i++) { 
 
    if(singleQuote) { 
 
    if(str[i] === "'") { 
 
     singleQuote = false; 
 
     endIndex = i; 
 
    } 
 
    continue; 
 
    } 
 
    if(str[i] === "'") { 
 
    singleQuote = true; 
 
    if(hasLoggedStartIdx == false){ 
 
     startIndex = i; 
 
     hasLoggedStartIdx = true; 
 
    } 
 
    } 
 
} 
 
console.log(startIndex+' - '+endIndex);

にコードを変更する必要があり、次の時間を書いていない

hasLoggedStartIdx 

は、書き込み済みかどうかを保持します。

質問が更新されるため

、次の方法でそれを行うことができます

function getMatches(str){ 
 
    let regex1 = /'(.*)';/g; 
 
    let regex2 = /'([^']*)'$/; 
 
    let result = []; 
 
    result = result.concat(regex1.exec(str)[1]); 
 
    result = result.concat(regex2.exec(str)[1]); 
 
    console.log(result); 
 
} 
 

 
getMatches("a = 'hello \'world\''; b = 'test'");

+0

答えをありがとう。もう1つ条件があります。私は質問を編集させてください。私のstrが壊れているとき var str = "a = 'hello \' world \ ''; b = 'new var'"; 次に、予想される出力は27〜33です。コードから文字列入力を取得したいとします。 – KishanR

+0

が編集で回答を追加しました – marvel308

1
あなたは以下のように-1と変更コードとしてのstartIndexを初期化する必要があります

var startIndex = -1; 

... 

if(str[i] == "'") { 
    singleQuote = true; 
    if (startIndex == -1) 
     startIndex = i; 
} 

... 

・ホープこれはあなたを助けるかもしれません。

2

var str = "a = 'hello \'world\''"; 
 
console.log(str.indexOf('\'')+' - '+str.lastIndexOf('\''));

非常に簡単なツールがある場合、複雑なものをやってみないでください:)。 indexOflastIndexOfを使用して、最後の...

関連する問題