1

次の標準関数では、2 番目と 3 番目のパラメーターに複数の引数を指定できます。

var retval = window.showModalDialog(dialog, varArgIn, varOptions);

varOptions パラメーターには、次のものを入力できます。

'dialogHeight:580px;dialogWidth:700px;center=yes;scroll=no', 

dialogHeight に設定されている値のみを取得するにはどうすればよいですか? そのため、その値だけを別の場所で再利用できます。

4

6 に答える 6

3

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

'dialogHeight:580px;dialogWidth:700px;center=yes;scroll=no'.match(/dialogHeight:\w+/)[0]; //dialogHeight:580px

あなたの場合、おそらく必要になるでしょう: varOptions.match(/dialogHeight:\w+/)[0];.

値のみが必要な場合は、次を使用できます。

varOptions.match(/dialogHeight:(\w+)/)[1];.

Founddrama が示唆したように、コードdialogHeightの部分文字列でない場合はエラーが発生します。varOptions上記のことを行うより良い方法は次のとおりです。

var match = varOptions.match(/dialogHeight:(\w+)/);
if (match && match.length >= 1) {
    console.log("The value is: " + match[1]);
}
于 2013-01-11T13:50:07.490 に答える
1

あなたの問題を理解しないでください。あなたはvarOptionsを埋めますね?オプションごとに新しい変数を作成し、必要なものをすべて再利用するだけです。

だから何かのような

var dialogHeight = 580;
var dialogWidth = 700;
var center = 'yes';
var scroll = 'no';

var options = 'dialogHeight:'+ dialogHeight +'px;dialogWidth:'+ dialogWidth '+x;center='+ center +';scroll='+ scroll;
var retval = window.showModalDialog(dialog, varArgIn, options);
alert('Reusing dialog height vairable here:'+ dialogHeight);

指定した文字列からdialogHeightを取得する場合は、次のようにします。

var input = 'dialogHeight:580px;dialogWidth:700px;center=yes;scroll=no';
var dialogHeight = input.match(/(?!dialogHeight:)[0-9]*(?=p)/ ,input);
alert(dialogHeight);

http://jsfiddle.net/E67RF/<-このコードでフィドルを操作する

于 2013-01-11T13:43:10.523 に答える
1

他の値が必要になる可能性がある場合は、オプションの文字列を辞書スタイルのオブジェクトに変換する関数があると便利です。

function getOptions(s) {
  var r = {}, kv;
  s = s.split(';');
  for (var i = 0; i < s.length; i++) {
    kv = s[i].split(s[i].indexOf(':') > -1 ? ':' : '=');
    r[kv[0]] = kv[1];
  }
  return r;
}
var opts = 'dialogHeight:580px;dialogWidth:700px;center=yes;scroll=no';
var optsObj = getOptions(opts);
console.log(optsObj.dialogHeight);
于 2013-01-11T14:00:59.063 に答える
1

次の方法で正規表現を使用します。

var s= 'dialogHeight:580px;dialogWidth:700px;center=yes;scroll=no';
alert(s.match(/dialogHeight:[\w]+\;/)[0].match(/:[\w]+;/)[0].replace(':',''));
于 2013-01-11T13:52:26.047 に答える
0

@Henrik Peinarの回答のように、まだ値を持っていないと仮定すると、文字列から値を解析できます(例の規則に従っている限り)。

これを行うには、いくつかの方法があります。

1) 文字列を JSON 表記にフォーマットし、オブジェクトに変換し、値にアクセスする

var objOptions = JSON.parse("{" + varOptions.replace(/;/g,",").replace(/=/g,":").replace(/(\w+)/g,'"$1"') + "}");

console.log(objOptions.dialogHeight);

2) RegEx を使用して探している値のみを解析します (私の例はエラーが発生しやすいため、本番環境では少し異なる方法で行います。これは簡単な例です)。

varOptions.match(/dialogHeight:(\w+);/)[1]

3)split名前と値のペアの配列を取得するために使用し、それらの結果をループして分割し、必要なものが見つかるまで「名前」部分をテストします。(時間がなくなったので、この例は省略します)

于 2013-01-11T14:01:12.040 に答える
0
var parseDialogOptions = function() {
  var optionDivider = /\s*;\s*/
    , valueDivider = /\s*[:=]\s*/
    , whiteSpace = /^\s+|\s+$/g

  return function(optionString) {
    var options = optionString.split(optionDivider)
      , obj = {}
    for (var i = 0, l = options.length; i < l; i++) {
      var parts = options[i].split(valueDivider)
      if (parts.length == 2) {
        obj[parts[0].replace(whiteSpace, '')] = parts[1].replace(whiteSpace, '')
      }
    }
    return obj
  }
}()

使用法:

>>> parseDialogOptions('dialogHeight:580px;dialogWidth : 700px; center=yes ; scroll=no ; ')
Object { dialogHeight="580px", dialogWidth="700px", center="yes", scroll="no" }
于 2013-01-11T14:11:24.837 に答える