0

separator分割を使用する関数がいくつかありますが、変数にしたいです。separatorはいくつかの場所で使用されるため、どこでもハード コードを変更するのではなく、変数を 1 回変更するだけでよいと考えられます。

しかし、もちろん、うまくいきません。パターンは正しいように見えますがsplit、分割を定義する変数に問題があるはずです。

Google Chrome のコンソールで行ったいくつかのテストを次に示します。

separator = '|'; // separator to use
var pattern = '/\\' + separator + '\\s*/'; // define pattern
undefined
pattern;
"/\|\s*/"
// pattern is correct
// now define function with constant... variable version commented:
function split( val ) {
        //var pattern = '/\\' + separator + '\\s*/'; 
        return val.split( /\|\s*/ );
        //return val.split( pattern );
    }
undefined
split('asdf|jkl');
["asdf", "jkl"]
// function worked as expected
// now uncomment the variable portions:
function split( val ) {
        var pattern = '/\\' + separator + '\\s*/'; 
        //return val.split( /\|\s*/ );
        return val.split( pattern );
    }
undefined
split('asdf|jkl');
["asdf|jkl"]
// not as expected. string is not split into array

これは分割機能と関係があると思います。これを機能させるにはどうすればよいですか?このようにする必要があると思う唯一の理由は、簡単に変更できるようにしたいからですseparator。それがなければ、機能するすべてのものをハードコーディングすることができました。

編集:正規表現を使用するかどうかは気にしません。ただし、文字列を分割しseparator、値から余分なスペースが削除されていることを確認する必要があります。

また、オートコンプリート用の jQuery UI ページ (こちら) にならってコードをモデル化しています。そして、これが彼らが持っている機能です。彼らが独自の を定義する理由がわかりませんsplit

function split( val ) {
     return val.split( /,\s*/ );
}
4

4 に答える 4

1

文字列を連結し、それを使用して新しいRegExpobjのインスタンスを作成します。

function split( val ) {
        var pattern = new RegExp('\\' + separator + '\\s*'); 
        return val.split( pattern );
}

編集

この特定の例では、String.prototype.split()に値がないように見えることに注意してください。

これは、特定のタイプのすべての分割に制限を設定する場合に、より便利です。

function split( val ) {
        var pattern = new RegExp('\\' + separator + '\\s*'); 
        return val.split( pattern , 3);
}

書く必要なしに:

strVar.split(pattern, 3);

はい、その制限は変数として保存して参照できますが、その変数を使用するすべての関数のスコープ全体でその変数を公開する必要があります。

代わりに文字列の配列を分割するように変更したい場合はどうなりますか?

于 2012-12-21T05:17:28.160 に答える
1

文字列または正規表現で分割できますが、それらを混同しないでください-

var separator='|', val='Split | on | the | pipes';
val.split(RegExp('\\' + separator + '\\s*')).join('\n');



/*  returned value: (String)
Split 
on 
the 
pipes
*/
于 2012-12-21T05:34:22.610 に答える
0

文字列自体を使用して分割できるため、 String.splitを使用するのが最善の方法です。

ただし、正規表現を調べたい場合は、分割を試みる前に、区切り文字が正しくエスケープされていることを確認する必要があります。

区切り文字を任意の文字列にすることができる機能関数は次のとおりです。

function split(val, separator) {
  var separator = separator.replace(/([^\w\s])/g, '\\$1');
  return val.split(new RegExp(separator));
}

split("String|$Array|$Objects", "|$");
> Result ["String", "Array", "Objects"]
于 2012-12-21T06:01:27.907 に答える
0

split()機能を自作するのに苦労せず使ってください

http://www.w3schools.com/jsref/jsref_split.asp

簡単な例

<p id="demo">Click the button to display the array values after the split.</p>

<button onclick="myFunction()">Try it</button>

<script>
function myFunction()
{
var str="How are you doing today?";
var n=str.split(" ");
document.getElementById("demo").innerHTML=n;
}
</script>

次に、パラメーターにパターンを配置しsplit()ます。split()正規表現を入力したと見なされるため、パラメーターに付ける文字は必ずエスケープしてください。セパレータ|は正規表現の特殊文字であり、バックスラッシュでエスケープする必要があります

于 2012-12-21T05:06:22.607 に答える