用空字符串替换String

时间:2014-07-23 10:13:17

标签: javascript string replace indexof

我有一个字符串,可以有以下子字符串值(也包括引号)

"+form"
"+ form "
" form+"
"form +"
+ form
+form
form+
form +
form   +
+    form
....
....
.... or just simply 'form' that doesnt surrounded by double quotes

问题是找到与以下

匹配的子串(+形式或形式+)
  • '+ form'不应该被引号括起来
  • '+'和'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?
 }

3 个答案:

答案 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