2012-01-16 3 views
2

入力した文字列の長さに基づいて、いくつかのフィールドを検証しています。ただし、以下の配列の値のいずれかが文字列の長さに対してカウントはいけません:キーワードのリストを除いた文字列の長さを数えますか?

var omittedSubStrings = ["%KEYWORD%","{Keyword:AltText}","%CITY_STATE%","%CITY%","%KEYWORD%","%KEY_WORD%","%QUERY_KEYWORD%","%QUERY_KEY_WORD%","$CLICK_ID$","$LOCATION$","%URLENC_CITY%","%NOSPACE_CITY%","%STATE%","$USER_PLACEMENT_INV_ID$"]; 

ので、例えば私の文字列がある場合:

var str = "Hello %CITY%"; 

私はその文字列目の長さを取得したいです1つの文字列に複数の変数を使用することもできますが、それらはすべて長さには数えないようにする必要があります。

提案?

+1

これらのキーワードは '{Keyword:AltText $ CITY $}'のようにネストできますか? – Anurag

+0

+1 @Anuragの質問 – PPvG

+0

いいえ、それらはネストされません – Evan

答えて

5
function countSubstringless(str, subStrings) { 
    var length = subStrings.length; 
    for (var i=0; i<length; i+=1) { 
     str = str.replace(subStrings[i], ''); 
    } 
    return str.length; 
} 

var omittedSubStrings = ["%KEYWORD%","{Keyword:AltText}","%CITY_STATE%","%CITY%","%KEYWORD%","%KEY_WORD%","%QUERY_KEYWORD%","%QUERY_KEY_WORD%","$CLICK_ID$","$LOCATION$","%URLENC_CITY%","%NOSPACE_CITY%","%STATE%","$USER_PLACEMENT_INV_ID$"]; 
var str = "Hello %CITY%"; 

console.log(countSubstringless(str, omittedSubStrings)); 
// 6 
+0

これはおそらく問題ではありませんが、これは '[" KEY "、"%KEYWORD% "]'に問題があります。 –

+0

@pst - 通常のテキストとの衝突を避けるために、キーワードが**%**や$ $などの特別な**文字で埋め尽くされていると仮定することは合理的です。それ以外の場合、OPには完全なパーサーが必要です。 @PPvG - 新しい文字列を作成するときに、 '.replace'を呼び出した結果を' countableStr'に戻したいと思うでしょう。 – Anurag

+0

@Anuragええ、そのキャッチのおかげで。 :-) – PPvG

2

これは別の回答です。

これは特別な正規表現文字は、単語リストに表示されていない(またはそれらがそうでない場合は適切に守られている)ことを前提としていこと注:

var omittedSubStrings = ["%KEYWORD%","{Keyword:AltText}","%CITY_STATE%","%CITY%","%KEYWORD%","%KEY_WORD%","%QUERY_KEYWORD%","%QUERY_KEY_WORD%","$CLICK_ID$","$LOCATION$","%URLENC_CITY%","%NOSPACE_CITY%","%STATE%","$USER_PLACEMENT_INV_ID$"] 

// make regular expression alternation for all words, global search 
var re = new RegExp(omittedSubStrings.join("|"), "g") 

var str = "%KEYWORD%Hello %CITY%" 
str.replace(re, "").length // 6 

(の質問は「この良いですか?」として残されています読者のための練習)

ハッピーコーディング。

関連する問題