js中用正则表达式取值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js中用正则表达式取值相关的知识,希望对你有一定的参考价值。

Editor.aspx?aid=1
这个字符串中,如何用正则表达式,取中其中的1

asp.net中,有正则表达式的Match方法,Js中应该也有,只是我不知道。
请高人指点下!

最基本的表达式创建法。

// Description: 演示正则表达式的创建

// CopyRight: http://www.cnblogs.com/yangmingming

// Notes: 最基本的创建法演示

var re=new RegExp ();
//RegExp 是JS中的类,同Array类似。然而这个创建方法没有指定表达式内容
re=new RegExp ("a");
//最简单的正则表达式,将匹配字母a
re=new RegExp ("a","i");
//重载的构造函数,其第二个参数指定将不区分大小写

其中,对于第二个参数,为可选参数,包括三种:
g :全文查找;
i :不区分大小写;
m:多行查找;
然而更为常见的正则表达式创建法则是:字面量的声明方式。 即:

// Description: 演示正则表达式的创建

// CopyRight: http://www.cnblogs.com/yangmingming

// Notes: 最基本的创建法演示

var re=/a/i;
//其作用同:re=new RegExp ("a","i"),而且更常用。
正则表达式方法:

test 方法:返回Boolean型。它指出被查找的字符串中是否包含该模式。如果存在返回True,否则返回False;
exec 方法:用正则表达式模式在字符串中寻找,并返回符合该正则表达式模式的数组;
参考技术A 说下思路吧:
1、先用字符串操作截取“?”之后的所有字符串。

2、用“,”split一下,取到所有传递参数。

3、然后再用“=”区分两边的值。“=”左边的相当于key,右边的相当于value
参考技术B 多个参数为例
http://127.0.0.1/e/action/ShowInfo.php?classid=9&id=2";

方法一
<script language = javascript>
function request(paras)
var url = location.href;
var paraString = url.substring(url.indexOf("?")+1,url.length).split("&");
var paraObj =
for (i=0; j=paraString[i]; i++)
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=")+1,j.length);

var returnValue = paraObj[paras.toLowerCase()];
if(typeof(returnValue)=="undefined")
return "";
else
return returnValue;


//如你给出的地址可以这样
var classid = request("classid");
var id = request("id");

//然后你就可以对这些参数处理了
</script>

方法二、

var url = "http://127.0.0.1/e/action/ShowInfo.php?classid=9&id=2";
function parse_url(_url)
var pattern = /(\w+)=(\w+)/ig;
var parames = ;
url.replace(pattern, function(a, b, c)
parames[b] = c;
);
return parames;


var parames = parse_url(url);
alert(parames['classid'] + ", " + parames['id']);

//结果 9, 2本回答被提问者采纳
参考技术C <script language = javascript>
function request(paras)
var url = location.href;
var paraString = url.substring(url.indexOf("?")+1,url.length).split("&");
var paraObj =
for (i=0; j=paraString[i]; i++)
paraObj[j.substring(0,j.indexOf("=")).toLowerCase()] = j.substring(j.indexOf("=")+1,j.length);

var returnValue = paraObj[paras.toLowerCase()];
if(typeof(returnValue)=="undefined")
return "";
else
return returnValue;


//如你给出的地址可以这样
var classid = request("classid");
var id = request("id");

//然后你就可以对这些参数处理了
</script>

方法二、

var url = "http://127.0.0.1/e/action/ShowInfo.php?classid=9&id=2";
function parse_url(_url)
var pattern = /(\w+)=(\w+)/ig;
var parames = ;
url.replace(pattern, function(a, b, c)
parames[b] = c;
);
return parames;


var parames = parse_url(url);
alert(parames['classid'] + ", " + parames['id']);

//结果 9, 2

在 Python 中用正则表达式替换

【中文标题】在 Python 中用正则表达式替换【英文标题】:Substitution by regular expression in Python 【发布时间】:2017-12-20 23:41:21 【问题描述】:

考虑 Python sn-p:

import re
str = 'that that kitty is cute'

# Anchor at beginning of string
rgexp_start = r'^(.*) \1'
print(re.sub(rgexp_start, r'\1', str))    

# Do NOT anchor at beginning of string
rgexp = r'(.*) \1'
print(re.sub(rgexp, r'\1', str))   

打印出来:

that kitty is cute
thatkittyiscute

为什么第二个正则表达式会删除所有空格?作为一个附加问题,请考虑 JavaScript sn-p:

var str = 'that that kitty is cute';
var rgexp_start = /^(.*) \1/;
alert(str.replace(rgexp_start, '$1'));

var rgexp = /(.*) \1/;
alert(str.replace(rgexp, '$1'));

给出两次:

that kitty is cute

为什么 JavaScript 在处理相同的正则表达式方面与 Python 不同?

【问题讨论】:

【参考方案1】:

为了回答您的第一个问题,re.sub完全替换您通过的模式。

所以,r'^(.*) \1' 的意思是,替换所有 从头开始的重复项。既然你指定了匹配从头开始,而且字符串只有一个开头,那么唯一能找到匹配替换的就是'^that that',这样就完成了。

In[]: 'that that kitty is cute'

'^that that' -> 'that'

Out[]: 'that kitty is cute'

r'(.*) \1' 的情况下,.* 实际上可以匹配0 个或多个字符。这很重要,因为现在正则表达式不再绑定到开头。所以它的作用是,除了'^that that'(第一个正则表达式也这样做)之外,它匹配'',然后是空格,然后再次匹配'',总共3次。因此,它将用'' 替换' '(两边都有''(空字符串)的空格)。

In[]: 'that that kitty is cute'

'that that' -> 'that'
' '         -> ''
' '         -> ''
' '         -> ''

Out[]: 'thatkittyiscute'

回答你的第二个问题,b/w python和JS的区别,正如anubhava所解释的那样,JS中的全局标志默认情况下是不启用的;只有第一个替换发生,其余的字符串保持不变。

【讨论】:

【参考方案2】:

Javascript 行为不同,因为您没有在 Javascript 正则表达式中打开 globalg 标志(在 python 中默认打开)。

如果您使用与g 标志相同的正则表达式:

var rgexp = /(.*) \1/g;
console.log(str.replace(rgexp, '$1'));

然后它会打印:

thatkittyiscute

python 的行为相同。

顺便说一句,如果你使用这个稍微不同的正则表达式:

(\S+) \1

然后它总是会在替换后打印这个,即使没有锚,就像你的第一个例子一样:

that kitty is cute

\S+ 匹配一个或多个非空白字符。

【讨论】:

以上答案都很有启发性。全部关闭:print(re.sub(r'(\S+) \1', r'\1', 'that that kitty is cute and the the puppy is playful')) 打印:that kitty is cute and the puppy is playful。正则表达式(\S+) \1 可以说是在支持正则表达式的文本编辑器中定位重复单词的最简单途径。 可惜不能勾选2个答案。我建议阅读 anubhava 和 COLDSPEED 的答案,两者都非常相关。

以上是关于js中用正则表达式取值的主要内容,如果未能解决你的问题,请参考以下文章

在js中用正则表达式判断url的格式

mysql 中用正则表达式如何取一个字符串中指定的字段,

JS中用正则扩展string的trim方法,里面的正则表达式是这样的(/(^\s*)(\s*$)/g, ""); 请问这代表啥意思

js 常用的正则表达式

jmeter中的正则表达式是啥意思

正则表达式教程——实践篇