-4

別のランダムな値を含む文字列を括弧で囲むにはどうすればよいですか? 理解を深めるためにこれを見てください:

var str = "ss(X)+ss(X)"

の中へ:

"(ss(X))+(ss(X))"

注: X は、「223」または「abc」「2+2+2」のような任意の値にすることができます。

4

3 に答える 3

1

文字列がランダムデータの場合、実際に何をラップしたいかわからないため、これは不可能です。ステップ1:「これをラップする必要がある」と「これをラップしない」の条件を確認します。その後、簡単な交換を行うことができます。

var shouldbewrapped = /([a-zA-Z\(\)])+/g;
var wrapped = string.replace(shouldbewrapped, function(found) {
  return "(" + found + ")";
});

これは正規表現の置換を行いますが、文字列を文字列に置き換える代わりに、文字列をその文字列で実行される関数の出力に置き換えます。

(「g」は、1つの置換を実行した後に停止するのではなく、文字列内のすべての一致に置換を適用するため、非常に重要であることに注意してください)

于 2013-02-23T16:14:50.783 に答える
0

これを試すことができます:

str = str.replace(/\w*\(\d*\)/g, function () {return '(' + arguments[0] + ')';});

jsFiddleでのライブ デモ


編集

条件を変更したため、正規表現ではタスクを実行できません。jsFiddleに、これを行う方法の例を示しました。副作用として、このスニペットは奇妙な括弧の可能性も検出します。

function addBrackets (string) {
    var str = '(' + string,
        n, temp = ['('], ops = 0, cls;
    str = str.replace(/ /g, '');
    arr = str.split('');
    for (n = 1; n < arr.length; n++) {
        temp.push(arr[n]);
        if (arr[n] === '(') {
            ops = 1;
            while (ops) {
                n++;
                temp.push(arr[n]);
                if (!arr[n]) {
                    alert('Odd opening bracket found.');
                    return null;
                }
                if (arr[n] === '(') {
                    ops += 1;
                }
                if (arr[n] === ')') {
                    ops -= 1;
                }
            }
            temp.push(')');
            n += 1;
            temp.push(arr[n]);
            temp.push('(');
        }
    }
    temp.length = temp.length - 2;
    str = temp.join('');
    ops = str.split('(');
    cls = str.split(')');
    if (ops.length === cls.length) {
        return str;
    } else {
        alert('Odd closing bracket found.');
        return null;
    }   
}

補足として:ss(a+b)またはcc(c*3-2)のように括弧内にランダムな文字列がある場合、通常のパターンとは一致しません。.*括弧内のテキスト (長さ不明) を検出するために特殊文字を使用しようとすると、失敗し)ます。

于 2013-02-23T16:55:26.473 に答える
0

文字列補間を行う必要があると思います。Math.random次に、ランダム性を生成したいものを設定できます。

于 2013-02-23T16:11:45.213 に答える