如何将字符串包装在其中包含另一个随机值的括号中?看看这个,以便更好地理解:
var str = "ss(X)+ss(X)"
进入:
"(ss(X))+(ss(X))"
注意:X 可以是任何值,例如:“223”或“abc”“2+2+2”
如何将字符串包装在其中包含另一个随机值的括号中?看看这个,以便更好地理解:
var str = "ss(X)+ss(X)"
进入:
"(ss(X))+(ss(X))"
注意:X 可以是任何值,例如:“223”或“abc”“2+2+2”
如果字符串是随机数据,那么这是不可能的,因为你不知道你真正想要包装什么。第 1 步:找出“这应该被包装”与“这不应该被包装”的条件。然后我们可以做一个简单的替换:
var shouldbewrapped = /([a-zA-Z\(\)])+/g;
var wrapped = string.replace(shouldbewrapped, function(found) {
return "(" + found + ")";
});
这会进行正则表达式替换,但不是用字符串替换字符串,而是用在该字符串上运行的函数的输出替换字符串。
(请注意,'g' 至关重要,因为它使替换适用于字符串中的所有匹配项,而不是在运行一次替换后停止)
我认为你需要做一些字符串插值。然后你可以设置一些Math.random
或任何你想要生成随机性的东西。
你可以试试这个:
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;
}
}
Just as a sidenote: If there's a random string within parentheses, like ss(a+b)
or cc(c*3-2)
, it can't be matched by any regular pattern. If you try to use .*
special characters to detect some text (with unknown length) within brackets, it fails, since this matches also )
, and all the rest of the string too...