RegEx - 如果找到搜索字符串的第一部分,则替换为完整的搜索字符串值

时间:2014-02-08 11:30:32

标签: javascript regex actionscript-3

是否有RegExp根据条件查找和替换值,“如果搜索字符串的第一部分在目标字符串中,则替换与搜索字符串匹配的部分。”

这是一种特殊的搜索和替换,因为替换也用作搜索字符串。

例如,我有这个网址:

http://www.domain.com/path/something/more/something/

搜索以下任何部分并替换为整体:

/path/user/

因为“/ path /”在替换字符串和目标字符串中,结果将是:

http://www.domain.com/path/user/something/more/something/

注意:搜索/替换值可以是任何值。

我不知道替换和搜索字符串在我替换时是什么,所以我不能使用硬编码搜索字符串的东西。例如,这不起作用,因为该术语是硬编码的:

s.replace(/(\/path\/)/, "$1value/");

另一个例子:
这句话是“谢谢苏珊的订单。” 这是搜索和替换,“苏珊萨默斯” 这是期望的句子,“谢谢Susan Summers的订单。”

使用案例
假设您有100万个文本文档,这些文档是客户的信件,但是当他们创建文档时,他们只在客户使用全名时才使用客户名字。现在,你的工作是找到并用他们的全名替换他们的名字的每一个出现。您只能使用其全名来处理非名字。

刚刚意识到这可能无法用作RegEx并且可能需要代码。

4 个答案:

答案 0 :(得分:0)

您可以使用:

s = 'http://www.domain.com/path/something/more/something/';
r = s.replace(/(\/path\/)/, "$user/");
//=> "http://www.domain.com/path/user/something/more/something/"

答案 1 :(得分:0)

在这种情况下,您不需要使用正则表达式:

var url = 'http://www.domain.com/path/something/more/something/';
url.replace('/path/', '/path/user/');
// => "http://www.domain.com/path/user/something/more/something/"

答案 2 :(得分:0)

split + join替代方:

url = url.split('/path/').join('/path/user/');

虽然您的要求不明确,但这是一个猜测,提出了一些额外的问题:

var sub = '/path/user/';
var parts = sub.match(/[^\/]+/g);
url = url.replace(new RegExp(
    '\\/(' + [parts.join('\\/')].concat(parts).join('|') + ')\\/'
), sub);

得到的正则表达式如下:

/\/(path\/user|path|user)\// // "/path/user/" OR "/path/" OR "/user/"

假设我们生活在最好的世界中,让我们检查一些网址:

'http://domain/'         -> 'http://domain/'
'http://path/user/'      -> 'http://path/user/'
'http://path/'           -> 'http://path/user/'
'http://user/'           -> 'http://path/user/'

现在,你如何看待以下几个?

'http://path/user'       -> 'http://path/user/user'
'http://user/path/'      -> 'http://path/user/path/'
'http://path/user/path/' -> 'http://path/user/path/'

其余问题是:

  • 这是你要找的吗?
  • 没有尾部斜线时该怎么办?
  • 在逆序案例中该怎么做?
  • 如何处理经常性零件?

答案 3 :(得分:0)

我不太确定我是否正确理解了这个问题。以下内容将整个/ path / user替换为/ path / user /( - >第1部分:'path',第2部分:'user')的任何部分:

var url1 = "http://www.domain.com/path/something/more/something/";
var url2 = "http://www.domain.com/user/something/more/something/";
url1.replace(/\/path\/|\/user\//, '/path/user/');
url2.replace(/\/path\/|\/user\//, '/path/user/');

结果:

http://www.domain.com/path/user/something/more/something/
http://www.domain.com/path/user/something/more/something/

我希望这是你需要的,否则,请添加另一个例子。

修改

以下是正则表达式:http://regex101.com/r/jL6tK6