我有一个字符串,可以有以下子字符串值(也包括引号)
"+form"
"+ form "
" form+"
"form +"
+ form
+form
form+
form +
form +
+ form
....
....
.... or just simply 'form' that doesnt surrounded by double quotes
问题是找到与以下
匹配的子串(+形式或形式+)'+'和'form'之间的空格数不受限制
如果找到,则应将其替换为空字符串“”
Input:
' form+ "form" + form '
Output:
"form"
输入: '形式' 输出: '形式'
任何帮助?
我只是处于初级水平,似乎我无法通过简单的替换和方法索引来解决这个问题: - (
var abc = string.replace(" " + "");
if(abc.indexOf("+form") > -1 || abc.indexOf("form+") > -1 || abc.indexOf("form") > -1 || abc.indexOf("\"+form\"") > -1 || || abc.indexOf("\"form+\"") > -1 )
{
// then what should do?
}
答案 0 :(得分:0)
试试这个:
var abc = string.replace(" ", "");
if (abc.indexOf("+form") > -1 {
abc.replace("+form", "");
}
else if (abc.indexOf("form+") > -1) {
abc.replace("form+", "");
}
else if (abc.indexOf("form") > -1) {
abc.replace("form", "");
}
else if (abc.indexOf("\"+form\"") > -1) {
abc.replace("\"+form\"", "");
}
else if (abc.indexOf("\"form+\"") > -1)) {
abc.replace("\"form+\"", "");
}
OR:
var array = new Array();
array.push("+form", "form+", "form", "\"+form\"", "\"form+\"");
for (var i = 0; i < array.length; i++) {
if (abc.indexOf(array[i]) > -1) {
abc.replace(array[i], "");
}
虽然使用正则表达式可能会更好。
答案 1 :(得分:0)
你应该尝试正则表达式。我知道他们很难创作,甚至更难阅读,但在这个网站上尝试其中一些:http://www.regexr.com/
以下是如何使用它们:http://www.w3schools.com/js/js_regexp.asp
但是如果你不喜欢使用正则表达式,你可以尝试创建像Nejc Lovrencic那样的有限状态机。
我尝试了一个小的正则表达式并且得到了这个:
/[ \t\n\r+]+[^"]\w+[^"][ \t\n\r+]*/g
它做什么?那么它会尝试找到+或空字符(如果我错过任何空格字符请纠正我)没有引号,带有多个字符的单词,没有引号,+或空字符,它将全局查找,表示每行。
更容易只查看&#34; form&#34;:
/\"\w+\"/g
这会在引号中查找单词。
第一种情况是使用replace()函数将这些单词替换为空字符串。
var result = intputString.replace("/[ \t\n\r+]+[^"]\w+[^"][ \t\n\r+]*/g", "");
引号加空字符串中的单词将存储在结果中。
如果您使用第二种情况,您可以轻松使用:
var regExp = /\"\w+\"/g
var result = regExp.exec(intputString)
引号内的单词将存储在结果中。
Egain这些是我在几分钟内制作的正则表达式,但我确信你可以拿出更具体的结果。
编辑:在第一种可能的情况下,错误的正则表达式,现在它应该没问题。
答案 2 :(得分:0)
希望这有帮助
var input = ' form + " form " + form " form + " " + form "';
var tmp = input.replace(new RegExp(/\"?\s*form\s*\"?\s*\+\s*\"?/g), ''); //form +
tmp = tmp.replace(new RegExp(/\"?\s*\+\s*form\s*\"?\s*\"?/g), '');// + form
alert(tmp);
必须创建两个正则表达式表达式,其中+位于'form'之前,另一个位于之后。可以有更好的方法。下面的一些注释有助于理解。
\s* -> zero or more spaces
\"? -> zero or one double quote
\+ -> one + symbol
/../g -> replace all matches