在括号中包装字符串,但在字符串中也包含随机值:

时间:2013-02-23 16:06:39

标签: javascript string

如何在包含另一个随机值的parantheses中包装一个字符串?看看这个是为了更好地理解:

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

INTO:

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

注意:X可以是任何值,如:“223”或“abc”“2 + 2 + 2”

3 个答案:

答案 0 :(得分:1)

如果字符串是随机数据,那么这是不可能的,因为你不知道你真正想要包装的是什么。第1步:找出“这应该被包裹”与“不应该被包裹”的条件。然后我们可以做一个简单的替换:

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

这是regexp替换,但它不是用字符串替换字符串,而是用该字符串上运行的函数的输出替换字符串。

(请注意,'g'是至关重要的,因为它会使替换适用于字符串中的所有匹配,而不是在运行一次替换后停止)

答案 1 :(得分:0)

我认为你需要做一些string interpolation。然后,您可以使用。

设置一些Math.random或任何您想要生成随机性的内容

答案 2 :(得分: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),则无法通过任何常规模式进行匹配。如果您尝试使用.*特殊字符来检测括号内的某些文本(长度未知),则会失败,因为这也匹配),而且所有其余的字符串也匹配...