質問する
480 次
3 に答える
0
私はあなたのコードを試しましたが、それは機能しません...正規表現を修正しても...
だから解決策があります:
<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
<script>
function findAndReplace(root) {
var children = root.childNodes;
var pattern = /([a-zA-Z]:[\\\/]|[\\\/])(\w+[\\\/])*\w+\.\w{3}/g;
var node;
for(var i = 0, l = children.length; i < l; i++) {
node = children[i];
if(node.nodeType === 3) { // we have a text node
if (node.nodeValue.match(pattern)) {
var mySpan = document.createElement("span");
mySpan.innerHTML = "<b>" + node.nodeValue.match(pattern) + "</b>";
node.parentNode.replaceChild(mySpan, node);
}
} else if(node.nodeType === 1) { // Element node
findAndReplace(node);
}
}
}
</script>
</head>
<body onload="javascript:findAndReplace(document);">
<form name="myform" action="test" method="POST">
<div align="center"><br>
<input type="radio" name="group1" value="Milk" /> Milk.txt<br />
<input type="radio" name="group1" value="Butter" checked /> Butter.txt<br />
<input type="radio" name="group1" value="Cheese" /> Cheese.tes
<hr />
<input type="radio" name="group2" value="Water"/> /bonjour.tsh<br />
<input type="radio" name="group2" value="Beer" /> Beer.txt<br />
<input type="radio" name="group2" value="Wine" checked /> /Milk.txt<br />
</div>
/Milk.txt
</form>
c:/bonjour/Milk.txt<br />
c:\test.txt
</body>
</html>
于 2013-03-20T15:00:26.783 に答える
0
簡単な回答: http://jsfiddle.net/dCE9k/1/
コードを少し変更しました。実際の例については、フィドルを参照してください。
正規表現は次のようになります。
/([a-zA-Z]:)?([\/\\])([a-zA-Z0-9\.]\2?)*/ig;
ドライブ文字に注意し、ディレクトリ区切り文字をキャプチャして、ファイル パス全体で再利用します。大文字、小文字、数字、ドットを有効なファイル名として使用できます。
このデモ HTML コードを使用しました
<p>\server\folder</p>
<p>\server\folder\</p>
<p>\server\folder\filename.txt</p>
<p>c:\</p>
<p>c:\folder</p>
<p>c:\folder\</p>
<p>c:\folder\filename.txt</p>
そして、私はあなたのJSコードを少し調整しました:
findAndReplace(document);
function findAndReplace(root) {
var children = root.childNodes;
var pattern = /([a-zA-Z]:)?([\/\\])([a-zA-Z0-9\.]\2?)*/ig; // applied new regex
var node;
for(var i = 0, l = children.length; i < l; i++) {
node = children[i];
if(node.nodeType === 3) { // we have a text node
if (pattern.test(node.nodeValue)){ // This line changed (maybe not required)
var newValue = "<b>" + node.nodeValue.match(pattern) + "</b>";
node.parentElement.innerHTML = newValue; // This line changed
}
} else if(node.nodeType === 1) { // Element node
findAndReplace(node);
}
}
}
于 2013-03-20T14:12:15.610 に答える
0
試すパターンは次のとおりです。
var pattern = /([a-z]:)?(\\\w+)+(\\|\.\w{3,4})?/;
説明:
([a-z]:)? - optionally starts with a drive letter and colon
\\ - backslash
\w+ - folder name
(\\\w+)+ - several subfolders possible
(\\|\.\w{3,4})? - optionally ends with a backslash or file extension
note that the file name would be caught by (\\\w+)+
于 2013-03-20T13:57:34.930 に答える