用于在javascript中忽略字符串的正则表达式

时间:2011-03-29 15:52:44

标签: javascript regex

我构建一个提交到搜索的查询,其中一个输入字段是“OR”的过滤器。我需要用+ OR +替换空格..只有当空格出现在引用文本之外时。所以这就是逻辑:

“快乐的日子”+ OR +“爱情船”

我有工作代码可以在这里执行此操作:

var filter2=$('[name=filter2]').val();
var str2 = jQuery.trim(filter2);
var filter2d = str2.replace(/" "/g, "\"+OR+\"");

仅当文本有引号时才有效。我希望能够这样做:

fonzy + OR +“Happy Days”+ OR +“Love Boat”

感谢任何帮助

3 个答案:

答案 0 :(得分:1)

Nailed it:

var input = '"abc def" ghi "klmno pqr" xyz';
input.replace (/("[^"]*"|\w+)(\s+|$)/g,'$1+OR+').slice (0,-4) ===
'"abc def"+OR+ghi+OR+"klmno pqr"+OR+xyz'

这假定您引用的字符串不包含引号字符。

答案 1 :(得分:1)

你也可以这样做。

'"abc def" ghi "klmno pqr"'.match(/"[^"]*"|[^\s]+/g).join("+OR+");

答案 2 :(得分:0)

应该这样做......

function replaceWhiteSpace(str)
{
  insideAQuote = false;
  len = str.length
  for (i=0; i < len; i++)
  {
    if (str.charAt(i) == '"')
    {
      insideAQuote = !insideAQuote;
    }
    else if (str.charAt(i) == ' ' && !insideAQuote)
    {
      str = str.substr(0, i) + "+OR+" + str.substr(i+1);
    }
  }
  alert(str);
}