JavaScript编程实践与解决方案
立即解锁
发布时间: 2025-08-20 01:27:20 阅读量: 1 订阅数: 5 


JavaScript入门与实践指南
### JavaScript 编程实践与解决方案
#### 1. 正则表达式的应用
正则表达式在 JavaScript 中是处理字符串的强大工具,下面通过几个具体的例子来展示其应用。
- **去除重复单词**
- **问题描述**:有一个字符串 “This sentence has has a fault and and we need to fix it.”,需要去除其中重复的单词。
- **解决方案**:
```javascript
var myString = "This sentence has has a fault and and we need to fix it.";
var myRegExp = /(\b\w+\b) \1/g;
myString = myString.replace(myRegExp,"$1");
```
- **代码解释**:正则表达式 `/(\b\w+\b) \1/g` 中,`(\b\w+\b)` 定义了一个捕获组,匹配一个完整的单词。`\b` 表示单词边界,`\w+` 表示一个或多个字母、数字或下划线。`\1` 表示匹配与第一个捕获组相同的内容。`g` 标志表示全局匹配。在 `replace` 方法中,`$1` 表示第一个捕获组的内容,将重复的单词替换为一个。
- **另一种创建 RegExp 对象的问题及解决**:如果使用 `new RegExp` 来创建正则表达式对象,代码如下:
```javascript
var myRegExp = new RegExp("(\\b\\w+\\b) \\1","g");
```
这里需要使用两个反斜杠 `\\` 来表示正则表达式中的特殊字符,同时传递 `g` 标志进行全局匹配。
- **替换特定单词**
- **问题描述**:将句子 “a dog walked in off a street and ordered a finest beer” 中的所有 “a” 替换为 “the”,但只替换单独的 “a”,不替换包含 “a” 的其他单词。
- **解决方案**:
```javascript
var myString = "a dog walked in off a street and ordered a finest beer";
var myRegExp = /\ba\b/gi;
myString = myString.replace(myRegExp,"the");
alert(myString);
```
- **代码解释**:正则表达式 `/\ba\b/gi` 中,`\b` 表示单词边界,确保只匹配单独的 “a”。`g` 标志表示全局匹配,`i` 标志表示忽略大小写。
- **去除违禁单词**
- **问题描述**:在一个节食网站的留言板上,需要去除与糖果相关的违禁单词,将其替换为 “salad”。
- **解决方案**:
```javascript
var myRegExp = /(sugar )?candy|choc(olate|oholic)?/gi;
var myString = "Mmm, I love chocolate, I’m a chocoholic. I love candy too, sweet, sugar candy";
myString = myString.replace(myRegExp,"salad");
alert(myString);
```
- **代码解释**:正则表达式 `/(sugar )?candy|choc(olate|oholic)?/gi` 可以匹配 “sugar candy”、“candy”、“chocolate”、“chocoholic” 等单词。`(sugar )?` 表示 “sugar ” 是可选的,`(olate|oholic)?` 表示 “olate” 或 “oholic” 是可选的。
#### 2. 网页广告的随机显示
在网页顶部显示广告图片,当页面加载时随机选择一张图片,并且每四秒更换一次图片,确保在所有图片都显示过之前不重复显示。
- **解决方案**:
```html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
var imagesSelected = new Array(false,false,false);
var noOfImages = 3;
var totalImagesSelected = 0;
function window_onload()
{
setInterval("switchImage()",4000);
}
function switchImage()
{
var imageIndex;
if (totalImagesSelected == noOfImages)
{
for (imageIndex = 0; imageIndex < noOfImages; imageIndex++)
{
imagesSelected[imageIndex] = false;
}
totalImagesSelected = 0;
}
var selectedImage = Math.floor(Math.random() * noOfImages) + 1;
while (imagesSelected[selectedImage - 1] == true)
{
selectedImage = Math.floor(Math.random() * noOfImages) + 1;
}
totalImagesSelected++;
imagesSelected[selectedImage - 1] = true;
document.imgAdvert.src = "AdvertImage" + selectedImage + ".jpg";
}
</script>
</head>
<body onload="window_onload()">
<img src="AdvertImage1.jpg" name="imgAdvert" />
</body>
</html>
```
- **代码解释**:
- `imagesSelected` 数组用于记录每张图片是否已经被显示过。
- `window_onload` 函数在页面加载时调用 `setInterval` 函数,每四秒调用一次 `switchImage` 函数。
- `switchImage` 函数中,首先检查是否所有图片都已经显示过,如果是,则重置 `imagesSelected` 数组。然后随机选择一张未显示过的图片,并更新 `imagesSelected` 数组和图片的 `src` 属性。
#### 3. 根据出生日期计算星期几
创建一个表单,让用户输入出生日期,然后根据输入的信息告诉用户他出生在星期几。
- **解决方案**:
```html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
var days = new Array();
days[0] = "Sunday";
days[1] = "Monday";
days[2] = "Tuesday";
days[3] = "Wednesday";
days[4] = "Thursday";
days[5] = "Friday";
days[6] = "Saturday";
function dayOfWeek()
{
var form = document.form1;
var date = parseInt(form.txtDate.value)
var year = parseInt(form.txtYear.value)
if (isNaN(date) || isNaN(year))
{
alert("Please enter a valid whole number");
}
else
{
if (date < 1 || date > 31)
{
alert("Day of the month must be between 1 and 31");
}
else
{
userDate = date + " ";
userDate = userDate +
form.selMonth.options[form.selMonth.selectedIndex].value;
userDate = userDate + " " + year;
var dateThen = new Date(userDate);
alert(days[dateThen.getDay()]);
}
}
}
</script>
</head>
<body>
<p>Find the day of your birth</p>
<p>
<form name="form1">
<input type="text" name="txtDate" size="2" maxlength="2">
<select name=selMonth>
<option selected value="Jan">Jan</option>
<option selected value="Feb">Feb</option>
<option selected value="Mar">Mar</option>
<option selected value="Apr">Apr</option>
<option selected value="May">May</option>
<option selected value="Jun">Jun</option>
<option selected value="Jul">Jul</option>
<option selected value="Aug">Aug</option>
<option selected value="Sept">Sept</option>
<option selected value="Oct">Oct</option>
<option selected value="Nov">Nov</option>
<option selected value="Dec">Dec</option>
</select>
<input type="text" name="txtYear" size="4" maxlength="4" />
<br>
<input type="button" value="Day of the week"
onclick="dayOfWeek()" name="button1" />
</form>
</p>
</body>
</html>
```
- **代码解释**:
- `days` 数组存储了一周七天的名称。
- `dayOfWeek` 函数首先获取用户输入的日期和年份,进行基本的输入验证。如果输入有效,则创建一个 `Date` 对象,并使用 `getDay` 方法获取星期几的索引,最后从 `days` 数组中获取对应的星期几名称并弹出提示框。
#### 4. 使用 Cookie 记录页面访问次数和显示不同广告
- **记录页面访问次数**
- **问题描述**:创建一个页面,记录用户在过去一个月内访问该页面的次数。
- **解决方案**:
```html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="JavaScript"
type="text/JavaScript"
src="CookieFunctions.js"></script>
<script type="text/javascript">
var pageViewCount = getCookieValue("pageViewCount");
var pageFirstVisited = getCookieValue("pageFirstVisited");
if (pageViewCount == null)
{
pageViewCount = 1;
pageFirstVisited = new Date();
pageFirstVisited.setMonth(pageFirstVisited.getMonth() + 1);
pageFirstVisited = pageFirstVisited.toGMTString();
setCookie("pageFirstVisited",pageFirstVisited,"","")
}
else
{
pageViewCount = Math.floor(pageViewCount) + 1;
}
setCookie("pageViewCount",pageViewCount,"","")
</script>
</head>
<body>
<script>
var pageHTML = "You’ve visited this page " + pageViewCount;
pageHTML = pageHTML + " times since " + pageFirstVisited;
document.write(pageHTML);
</script>
</body>
</html>
```
- **代码解释**:通过 `getCookieValue` 函数获取 `pageViewCount` 和 `pageFirstVisited` 两个 Cookie 的值。如果 `pageViewCount` 不存在,则将其初始化为 1,并记录当前日期加一个月作为 `pageFirstVisited`。每次访问页面时,`pageViewCount` 加 1,并更新 Cookie。最后在页面上显示访问次数和首次访问日期。
- **显示不同广告**
- **问题描述**:使用 Cookie 每次用户访问网页时显示不同的广告。
- **解决方案**:
```html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="JavaScript" type="text/JavaScript" src="CookieFunctions.js"></
script>
</head>
<body>
<img src="AdvertImage1.jpg" name="imgAdvert">
<script type="text/javascript">
var imageNumber = getCookieValue("displayedImages");
var totalImages = 3;
if (imageNumber == null)
{
imageNumber = "1";
}
else
{
imageNumber = Math.floor(imageNumber) + 1;
}
if (totalImages == imageNumber)
{
setCookie("displayedImages","","","Mon, 1 Jan 1970 00:00:00");
}
else
{
setCookie("displayedImages",imageNumber,"","");
}
document.im
```
0
0
复制全文
相关推荐










